我想基於一個鍵陣列對不同的項目數組進行排序。以下簡單的代碼表示我的更復雜的代碼:排序數組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