1つのキー配列に基づいて異なるアイテム配列をソートしようとしています。 「第2」及び「第三」と呼ば配列の並べ替え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を追加して「3番目」をソートするまで、これは完全に機能します。私は他のソートアクションのためのキー配列として 'first'を保持したいので、一時的な配列 'temp'を使用して、最初のシーケンスを保存し、毎回再利用できるようにします。 Array.Sort(最初、3番目)を使用して3番目のソートを再利用すると、ソートは機能しません(出力を参照)。最初の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(配列キー、配列アイテム); すでにソートされている最初の配列に存在するキーに基づいてソートされます。 – Nilay
@ニレイ:あなたはその質問を読んだことがありますか? –
はい@TimSchmelter、デバッグ配列で最初に既にソートされ、そのメソッドのキーとして使用されているので、アイテム配列をソートしません。 firstArrayをソートして試してみてください。 – Nilay