2

有没有办法在数组中移动项目?例如:

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

第二个元素成为最后一个:

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

PS:不,这不是家庭作业。我可以想到至少一种解决方案,但它需要相当困难的实现:

  • 首先我们将第二个元素保存到 Int
  • 然后我们从数组中删除这个元素
  • 然后我们在数组的最后添加新元素

任何其他(阅读 - 更容易)的方式来做到这一点?

4

5 回答 5

8

使用数组没有简单的方法来做到这一点。您必须遍历数组,将每个元素向上移动到正在移动的索引,然后在末尾重新插入该元素。你总是可以使用 aList<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

If the array is always a fixed size then:

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

But if it is variable in size then it becomes trickier and is best done in a List first

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 回答