【发布时间】:2021-08-27 12:29:38
【问题描述】:
我有一个奇怪的问题,我在一个简单的 for 循环中丢失了数据。
基本上我有一个间隔,我必须以较小的间隔切割一个标记(这里是 5.0)。整个结果被保存到一个列表数组中。
我使用开关索引(例如,我们可以通过 find 命令轻松获得的数字 5 的索引)和块数(最后的间隔更小)。
我的算法运行良好,因为我在每个循环之后打印我提取的较小间隔。然而,当传递到下一个循环时,前一个间隔被放入一个空列表。为什么会这样?最后我有一个无用的空列表数组。
我添加了 WriteLine 语句来显示问题。在一个循环完成之前,我得到了我想要的间隔,但是当传递到下一个循环时,变量会以某种方式被清空
var wholeList = new List<double> { 1.2, 2.5, 5.0, 2.2, 3.4, 5.0, 1.2, 2.5, 5.0, 2.2, 3.4, 5.0, 1.2, 2.5, 5.0, 2.2, 3.4, 5.0 };
int[] switchIndex = { 2, 5, 8, 11, 14, 17};
int number0 = 6;
var result0 = DivideInterval(wholeList, number0, switchIndex);
调用函数
List<double>[] DivideInterval(List<double> myList, int numberOfBlocks, int[] switchingPoint)
{
List<double>[] finalArray = new List<double>[numberOfBlocks];
var temporaryList = new List<double> { };
int j = 0;
for (int i = 0; i < switchingPoint.Length; i++)
{
for (int k = j; k <= switchingPoint[i]; k++)
temporaryList.Add(myList[k]);
finalArray[i] = temporaryList;
Console.WriteLine("---");
foreach (var item in finalArray[i])
Console.WriteLine(item);
Console.WriteLine("---");
temporaryList.Clear();
j = switchingPoint[i] + 1;
}
Console.WriteLine("--final result");
for (int item = 0; item < finalArray.Length; item++)
{
Console.WriteLine("length is: " + finalArray[item].Count());
for (int number = 0; number < finalArray[item].Count(); number++)
Console.WriteLine(item);
}
Console.WriteLine("--final result");
return finalArray;
}
【问题讨论】:
-
List<double>[]- 我从未在现实生活中的代码中看到过这种情况...... -
因为较小的间隔需要是动态的;它们没有固定的大小。它们可以很大也可以很小。该示例只是简单地显示问题。列表列表会是更好的方法吗?