我想解決一個簡單的算法一個特定的方式,它需要當前行並將其添加到最頂端的行。我知道有很多方法可以解決這個問題,但目前我有一個逐行讀取的文本文件。每行都轉換爲一個字節(有一定的原因,我爲什麼使用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,但他們似乎沒有爲我工作太熱。提前致謝!
您正在遞增totalIndex每次迭代。這意味着每次迭代你想添加一個額外的項目,對嗎?你可以使用List.Add方法(或者爲什麼不呢?)。 – usr
是的,但我沒有使用「添加」功能我想使用添加並添加這兩個值。邏輯還沒有完全存在,我只需要照顧索引超出範圍的問題,而不是增加 –
與添加我的意思是'total.Add(digit.toString())'。這不正常嗎? – usr