当我运行一个旨在进行训练和测试数据交叉验证的简单代码时,我会遍历列表的每个计数,但每次迭代时列表减少1.
for (var i = 0; i < adjustedData.Count; i++)
{
var tempData = adjustedData;
var testData = tempData[i].ToArray();
var trainDataList = tempData;
trainDataList.RemoveAt(i);
var trainData = trainDataList.ToArray();
答案 0 :(得分:4)
不应该导致您的代码从数组/列表中删除该项目。以下代码行
trainDataList.RemoveAt(i);
答案 1 :(得分:2)
当您致电trainDataList.RemoveAt(i);
时,您正在移除阵列中的元素。这与清除值不同:trainDataList[i] = null;
;
让我们使用一个真实的例子。想象一下,阵列是一系列排列在桌子上的杯子。当您致电trainDataList.RemoveAt(i);
时,您需要移除其中一个杯子。当您致电trainDataList[i] = null;
时,您将杯子留在那里,但只是将内容丢弃。
答案 2 :(得分:0)
由于您要删除项目,因此数组大小会更改
trainDataList.RemoveAt(i);
答案 3 :(得分:0)
作业:
var tempData = adjustedData;
// ...
var trainDataList = tempData;
不会克隆您的列表。他们只会复制参考文献。因此,您将有三个对相同列表的引用。
您可以使用以下内容制作(浅层)克隆
var tempData = adjustedData.ToList(); // using Linq
在克隆上调用.RemoveAt
不会影响原始文件,因为这次您引用了不同的列表实例。