gpt4 book ai didi

c# - 排序数组 C# : key array changes unintendedly

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:09 24 4
gpt4 key购买 nike

我正在尝试根据一个键数组对不同的项目数组进行排序。下面的简单代码代表了我更复杂的代码:

int[] first = new int[] { 1, 9, 2, 3, 8, 4, 5 };
string[] second = new string[] { "one", "nine", "two", "three", "eight", "four", "five" };

int[] temp = first;
Array.Sort(temp, second);

foreach (int v in temp)
{
Debug.WriteLine(v.ToString());
}

foreach (string v in second)
{
Debug.WriteLine(v);
}

int[] third = new int[] { 11, 99, 22, 33, 88, 44, 55 };

foreach (int v in first)
{
Debug.WriteLine(v.ToString());
}

Array.Sort(first, third);

foreach (int v in first)
{
Debug.WriteLine(v.ToString());
}

foreach (int v in third)
{
Debug.WriteLine(v);
}

名为“second”和“third”的数组应根据数组“first”的顺序进行排序。我发现我可以这样做:

Array.Sort(first, second)

这非常有效,直到我添加另一个 Array.Sort 来对“第三”进行排序。由于我想保留“first”作为其他排序操作的键数组,因此我使用一个名为“temp”的临时数组来保存“first”的初始序列,以便每次都可以重复使用。当我重用 first 也使用 Array.Sort(first, third) 对“third”进行排序时,排序不起作用(请参阅输出)。在第一个 Array.Sort 期间,“first”似乎与“temp”一起排序,即使它不在命令中。

输出:

1
2
3
4
5
8
9

one
two
three
four
five
eight
nine

1 //--> 'first' before it is used in Array.Sort, so it seems already sorted
2
3
4
5
8
9

1
2
3
4
5
8
9

11 //--> 'third' does not get sorted because 'first' seemed already sorted
99
22
33
88
44
55

如何确保我的键数组没有被排序,以便我可以多次使用它?

最佳答案

数组是一种引用 类型。变量是值的占位符。存储在引用类型变量中的值是它引用的对象在内存中的“地址”(可以这么说)。当您将一个引用类型变量的值分配给另一个时,您只是复制值存储在变量中。

那么这跟什么有什么关系呢? 一切!

int[] temp = first;

这里的这一行并没有按照您的想法行事。它只是将存储在 first 中的值复制到名为 temp 的变量中。那是什么值(value)?是的,数组的地址,所以现在,tempfirst 都指向完全相同的数组;因此,通过 temp 对数组所做的任何更改也会更改 first 引用的数组,因为它们是同一个数组。

您每次都需要创建数组的新副本。 Pablo notPicasso's answer 中显示了最简单的方法.

关于c# - 排序数组 C# : key array changes unintendedly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45100121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com