【发布时间】:2021-11-20 21:48:41
【问题描述】:
我打算有一个 List<int[]> 类型的字段,它包含一些 int 数组(在 Unity 中用于记录一些网格位置),大致如下:
{
{0, 0},
{0, 1},
{0, 2}
}
但是当我尝试从这个列表中删除元素时,这样做似乎有些困难:
int[] target = new int[] {0, 0};
// Simplified, in the actual code I have to do some calculations.
// But during debug, I confirmed that the same array I want to remove
// is in the intArrayList
intArrayList.Remove(target);
// {0, 0} seems to be still here
这应该发生吗?如果是这样,我该如何解决?
【问题讨论】:
-
那些是内存中不同的对象。这就是删除不起作用的原因。这适用于引用类型,例如整数或字符串,但由于目标是数组(引用类型),remove 找不到该项目。我认为找到索引并按索引删除是最好的选择。
-
尝试阅读这个答案,可能有用:stackoverflow.com/questions/10018957/…
-
您的列表是否必须是普通的旧数组?如果不是,您可以创建一个准数组类并覆盖 GetHashCode (可能 xor ^ 所有数字)和 Equals (实际上检查每个元素的相等性)。然后 List.Remove 就可以了。
-
“但在调试过程中,我确认我想删除同一个数组”这看起来并不正确,尤其是基于已接受的答案。请注意您观察/报告的内容:“相同的数组”和“具有相同值的数组”是非常不同的东西 - 即问题中显示的示例确实暗示
intArrayList = new List<int[]>(target, new[]{0,1}, new[]{0,2});但接受了答案提示。