我想基于一个键阵列对不同的项目数组进行排序。以下简单的代码表示我的更复杂的代码:排序数组C#:键阵列意外更改
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(第一,第三)排序'第三'时,排序不起作用(见输出)。在第一个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
如何确保我的键部分没有得到分类,这样我可以多次使用它?
public static void Sort(Array keys,Array items); 它将根据第一个数组中存在的键进行排序,该数组已经排序。 – Nilay
@Nilay:你看过这个问题吗? –
是@TimSchmelter,您可以在调试数组中看到第一个已经排序并用作该方法的关键字,因此它不会对它的项目数组排序。尝试用排序firstArray。 – Nilay