2013-02-09 164 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

相關問題