これは学校の課題用です。
私自身と私のグループパートナーは、同じ配列内の別のインデックスに値を移動できるかどうか疑問に思っていますか?
もちろん。
var temp = array[i];
array[i] = array[j];
array[j] = temp;
もちろんできます。
var array= new int[]{1, 2, 3};
foreach (var i in array)
{
Console.WriteLine (i);
}
array[1] = array[2];
foreach (var j in array)
{
Console.WriteLine (j);
}
結果は次のようになります。
1 2 3
1 3 3
ここに がありDEMO
ます。
しかしもちろん、これはある値から別の値への値の対処になります。古いインデックス値は新しいインデックス値に移動されます。値を変更したい場合は、Daniel's answer のtemp
ような値を使用できます。
C# で値を移動することは、たとえばオレンジを冷蔵庫からテーブルに移動することとは大きく異なります。つまり、オレンジをある場所から別の場所に移動すると、古い場所にはオレンジが含まれなくなります。
一方、配列内のアイテムの移動は、基本的に*をコピーする行為なので、次のように記述できます。
myArray[newIndex] = myArray[oldIndex];
これで、古いインデックスの項目が新しいインデックスに移動されました。古いインデックスにもアイテムが含まれています。それが発生したくない場合は、アイテムを別のものに置き換えて明示的に「削除」する必要があります。参照オブジェクトの配列では、次のように置き換えますnull
。
myArray[oldIndex] = null;
値オブジェクトの配列では、「なし」として指定する特別な値に置き換えるnull
か、値オブジェクトが null 許容の場合に置き換えます。
コピーは単純です
array[Index+1] = array[Index]
スワップは
var tmp = array[Index + 1];
array[Index+1] = arry[Index];
array[Index] = tmp;
うまく移動するかどうかは、移動したアイテムを何に置き換えて、空になったことを示すかによって異なります。
array[Index+1] = array[Index];
array[Index] = -1;
アレイをスタッカー トレイと考えてください。物をそこに入れたり、物を動かしたりできますが、物をある引き出しや別の引き出しに入れても、他のものの順序には影響しません。
配列を使用するのではなく、リストを使用できます
List<int> myList = new List<int>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
myList.Add(4);
myList.Add(5);
1,2,3,4,5が得られます。
それから呼び出す
int temp = myList[1];
myList.RemoveAt(1);
myList.Insert(3, temp);
あなたに1,3,4,2,5を与えるでしょう