当我迭代count时,我的数组改变了大小,为什么?
本文关键字:为什么 改变 我的 迭代 count 数组 | 更新日期: 2023-09-27 18:01:17
当我运行一个简单的代码来设计训练和测试数据交叉验证时,我遍历列表的每个计数,但每次迭代列表都会减少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();
这难道不是因为你的代码正在从数组/列表中删除项目吗?以下代码行
trainDataList.RemoveAt(i);
调用trainDataList.RemoveAt(i);
时,您正在删除数组中的一个元素。这与清除值不同:trainDataList[i] = null;
;
让我们使用一个现实世界的例子。想象一下,数组是一系列在桌子上排列的杯子。当你呼叫trainDataList.RemoveAt(i);
时,你正在移除其中一个杯子。当你叫trainDataList[i] = null;
时,你把杯子留在那里,只是把里面的东西倒出来。
因为你要删除一个项目,你的数组大小改变了
trainDataList.RemoveAt(i);
分配:
var tempData = adjustedData;
// ...
var trainDataList = tempData;
不会克隆您的列表。他们只会复制参考文献。因此,您将有三个引用相同的列表。
你可以创建一个(浅)克隆:
var tempData = adjustedData.ToList(); // using Linq
在克隆上调用.RemoveAt
不会影响原始的,因为这次您有对不同列表实例的引用。