2

配列内でアイテムを移動する方法はありますか?例えば:

int[] myArray = {1,2,3,4};

2番目の要素が最後になります:

int[] myArray = {1,3,4,2};

PS:いいえ、それは宿題ではありません。私は少なくとも1つの解決策を考えることができますが、それはかなり難しい実装を必要とします:

  • まず、2番目の要素をIntに保存します
  • 次に、この要素を配列から削除します
  • 次に、配列の最後に新しい要素を追加します

これを行う他の(読む-簡単な)方法はありますか?

4

5 に答える 5

8

配列を使用してそれを行う簡単な方法はありません。配列をループして、移動するインデックスまですべての要素をシフトし、最後にその要素を再挿入する必要があります。あなたはいつでもそれをするために使うことができますList<int>

List<int> list = myArray.ToList();
int value = list[1];
list.RemoveAt(1);
list.Add(value);
myArray = list.ToArray();
于 2012-06-05T15:24:43.167 に答える
3

を使用しList<int>ます。配列は、すべての要素のそのような動きのためのものではありません。

または、最後の要素と選択した要素を入れ替えてみてください。ただし、順序が乱れます。

于 2012-06-05T15:23:17.480 に答える
1

配列が常に固定サイズの場合、次のようになります。

myArray = new int[4] { myArray[0], myArray[2], myArray[3], myArray[1] };

ただし、サイズが可変の場合は扱いにくくなり、最初にリストで実行するのが最適です。

int lastElement = 0;
List<int> newArray = new List<int>();
for ( int index=0; index<myArray.Length; index++)
{
     if ( index == 1 ) lastElement = myArray[index];
     else newArray.Add(myArray[index]);
}
newArray.Add(lastElement);
myArray = newArray.ToArray();
于 2012-06-05T15:27:52.173 に答える
1
   myArray = new List<int>(myArray.Where((x, i) => (i != 1))) 
               { myArray[1] }.ToArray();
于 2012-06-05T15:35:48.320 に答える
0

この場合、XORスワップを使用できます。

[Test]
public void TestSwap()
{
    int[] myArray = { 1, 2, 3, 4 };

    Console.WriteLine(string.Join(", ", myArray));

    Swap(myArray, 1, 2);
    Swap(myArray, 2, 3);

    Console.WriteLine(string.Join(", ", myArray));
}

static void Swap(int[] vals, int x, int y)
{
    vals[x] = vals[x] ^ vals[y];
    vals[y] = vals[y] ^ vals[x];
    vals[x] = vals[x] ^ vals[y];
}
于 2012-06-05T15:28:23.783 に答える