2013-02-09 167 views

回答

4

当然。

var temp = array[i]; 
array[i] = array[j]; 
array[j] = temp; 
+0

那么,它会交换,但问题是如此模糊,这听起来像是一个删除和插入会更好... – 2013-02-09 20:00:54

+0

数组通常被认为是固定的大小。因此,交换对我来说似乎与移动数组中的项目一样近。 – 2013-02-09 20:02:30

1

当然你可以;

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

但是,当然,这会应对从一个值到另一个值的价值。旧的索引值被移动到新的索引值。如果您想要使用更改值,可以使用temp值,如Daniel's answer

1

在C#中移动一个值与将橙色从冰箱移动到桌面上非常不同,因为当您将橙色从一个地方移动到另一个地方时,旧地方不再包含橙色。

将某个项目在阵列中,而另一方面,实质上是复制*的行为,所以你可以写这样的事情:

myArray[newIndex] = myArray[oldIndex]; 

现在从旧索引项被移到它的新索引。旧索引也包含该项目。如果你不希望发生这种情况,你需要通过用其他东西替换来明确地“移除”该物品。在参考对象的数组你null替换:

myArray[oldIndex] = null; 

在值对象的数组,你用你指定为“无”的一些特殊值取代它,或者用null如果你的值对象为空。


*你复制的内容依赖于数组元素的类型:在值类型的数组,该项目本身被复制;在引用类型的数组中,引用被复制。继续橙色的比喻,当桔子是一个参考类型时,桔子数组是一个定义桔子数组中所有桔子位置的便利贴的列表。而不是将橘子移入阵列中,而是放置一张贴有“从右侧起第三个橘子”的便笺,并将桔子留在原位。复制参考对象只需复制其便笺。

+0

+1只是为了您的努力和美丽的分析。 – 2013-02-09 20:16:39

0

拷贝简直是

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; 
0
的东西是什么

将阵列想象成堆垛托盘。事情可以在他们身上,你可以移动东西,但将东西放入一个抽屉或其他东西不会影响其他任何顺序。

而不是使用数组,你可以使用一个列表

 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

相关问题