【发布时间】:2017-07-14 10:00:24
【问题描述】:
我正在尝试根据一个键数组对不同的项目数组进行排序。下面的简单代码代表我的更复杂的代码:
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);
}
数组,称为“第二”和“第三”,应根据数组“第一”的顺序进行排序。我发现我可以这样做:
Array.Sort(first, second)
这非常有效,直到我添加另一个 Array.Sort 来排序“第三”。由于我想保留 'first' 作为其他排序操作的键数组,因此我使用一个名为 'temp' 的临时数组来保存 'first' 的初始序列,以便每次都可以重用。当我重用第一个也使用 Array.Sort(first,third) 对“第三个”进行排序时,排序不起作用(参见输出)。似乎“first”在第一个 Array.Sort 期间与“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
如何确保我的键数组没有被排序以便我可以多次使用它?
【问题讨论】:
-
public static void Sort(Array keys, Array items);它将基于键进行排序,该键出现在第一个数组中,该数组已经排序。
-
@Nilay:你读过这个问题吗?
-
是的@TimSchmelter,您可以在调试数组中看到第一个已经排序并用作该方法的键,因此它不会对其项目数组进行排序。尝试对 firstArray 进行排序。
-
@Nilay:数组“first”最初没有排序,我的问题是为什么“first”得到排序,即使我没有在第一个 Array.Sort 中使用“first”。相反,我使用了“temp”并且仍然对“first”进行了排序,即使没有来自我这边的特定命令。 InBetween 的回答解释了我做错了什么。