public static List<int> dynamicArray(int n, List<List<int>> qu)
{
List<int> ls1 = new List<int>();
int lastAnswer = 0;
foreach (List<int> ls in qu)
{
int index = (ls[1] ^ lastAnswer) % n;
if (ls[0] == 1)
{
List<int> s1111 = qu[index];
s1111.Add(ls[2]);
}
else
{
List<int> s1111 = qu[index];
int ind = ls[2] % s1111.Count;
lastAnswer = s1111[ind];
ls1.Add(lastAnswer);
}
}
return ls1;
}在调试过程中,我发现qu列表值正在发生变化,我很困惑为什么会发生这种情况,因为没有什么地方可以更改qu的值。
如果这个问题是愚蠢的,请提前道歉,但我仍然需要澄清我的疑虑。
发布于 2020-03-14 23:15:34
当你这样做时:
List<int> s1111 = qu[index];.你得到的不是qu[index]的拷贝(或克隆),而是它的引用。
所以这个:
s1111.Add(ls[2]);
...is与您所做的相同:
qu[index].Add(ls[2]);
如果您想对一个克隆进行操作,并保持qu完整,您可以这样做:
List<int> s1111 = qu[index].ToList();或者这个:
List<int> s1111 = new List<int>(qu[index]);...but理解,这两种方法对于值类型的List<T> (例如int)来说都会像预期的那样工作。如果您使用的是引用类型元素,那么s1111中元素属性的更改将反映在qu[index]元素中,因为同样,每个元素只是对原始元素的引用。当你继续前进的时候,要记住一些事情。
https://stackoverflow.com/questions/60688067
复制相似问题