我正在尝试以一种特定的方式解决一个简单的算法,它采用当前行并将其添加到最上面的行。我知道有很多方法可以解决这个问题,但目前我有一个可以逐行读取的文本文件。每一行都转换为一个 sbyte(我使用 sbyte 是有一定原因的,但这与我的帖子无关,在这里我不会提及)并添加到列表中。从那里,该行被反转并添加到另一个列表中。这是我第一部分的代码:
List<List<sbyte>> largeNumbers = new List<List<sbyte>>();
List<string> total = new List<string>();
string bigIntFile = @"C:\Users\Justin\Documents\BigNumbers.txt";
string result;
StreamReader streamReader = new StreamReader(bigIntFile);
while ((result = streamReader.ReadLine()) != null)
{
List<sbyte> largeNumber = new List<sbyte>();
for (int i = 0; i < result.Length; i++)
{
sbyte singleConvertedDigit = Convert.ToSByte(result.Substring(i, 1));
largeNumber.Add(singleConvertedDigit);
}
largeNumber.Reverse();
largeNumbers.Add(largeNumber);
}
从那里,我想使用一个空列表来存储我稍后将用于添加我的数字的字符串。但是,我希望能够将数字添加到这个名为“total”的新列表中。我将添加到其中的数字的长度并不完全相同,因此,我需要检查某个位置是否存在索引,如果存在,我会将我正在查看的值添加到数字驻留在该索引中,如果没有,我需要创建该索引并将其值设置为 0。在尝试这样做时,我不断收到 IndexOutOfRange 异常(显然是因为该索引不存在)。:
foreach (var largeNumber in largeNumbers)
{
int totalIndex = 0;
foreach (var digit in largeNumber)
{
if (total.Count == 0)
{
total[totalIndex] = digit.ToString(); //Index out of Range exception occurs here
}
else
{
total[totalIndex] = (Convert.ToSByte(total[totalIndex]) + digit).ToString();
}
totalIndex ++;
}
}
我只是不知所措。关于如何检查该索引是否存在的任何想法;如果它没有创建它并将其基础值设置为 0?这对我来说只是一个有趣的练习,但我用这个可爱的索引部分撞到了一堵砖墙。我尝试使用 SingleOrDefault 和 ElementAtOrDefault 但它们似乎对我来说并不那么热。提前致谢!