Sri*_*rma 1 c# debugging logic
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;
}
Run Code Online (Sandbox Code Playgroud)
在调试时,我发现 qu 列表值正在改变,我很困惑为什么会发生这种情况,因为我没有在任何地方改变 qu 的值。
如果问题很愚蠢,请提前抱歉,但我仍然需要清除我的疑问。
当你这样做时:
List<int> s1111 = qu[index];
Run Code Online (Sandbox Code Playgroud)
...您没有获得 的副本(或克隆)qu[index],而是获得了对它的引用。
所以这:
s1111.Add(ls[2]);
...就像你这样做一样:
qu[index].Add(ls[2]);
如果您想对克隆进行操作并qu保持原样,您可以这样做:
List<int> s1111 = qu[index].ToList();
Run Code Online (Sandbox Code Playgroud)
或这个:
List<int> s1111 = new List<int>(qu[index]);
Run Code Online (Sandbox Code Playgroud)
...但要了解,对于 a List<T>of values 类型(例如int),这两种方法都可以正常工作。如果您正在使用引用类型元素,那么对元素属性的更改s1111将反映在元素中,qu[index]因为同样,每个元素只是对原始元素的引用。只是在您前进时要记住的事情。