2013-02-09 4 views
0

Это для школьного задания.Перемещение значений из одного индекса в другой в пределах одного и того же массива, возможно?

Я и мой групповой партнер задаются вопросом, можно ли переместить значение в другой индекс в пределах того же массива?

+6

Пробовали ли вы что-нибудь? – bas

ответ

4

Несомненно.

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

Ну, это поменялось бы, но вопрос настолько расплывчатый, что мне кажется, что удаление и вставка будут лучше ... –

+0

Массивы обычно считаются фиксированными. Поэтому мне кажется, что замена меня как можно ближе к перемещающимся элементам в массиве. –

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, если ваш объект значение обнуляемым ,


* Что вы копируете зависит от типа элемента массива: в массиве типов значений, сам элемент получает скопирован; в массиве ссылочных типов копируется ссылка. Продолжая апельсиновую аналогию, когда оранжевый является ссылочным типом, массив апельсинов представляет собой список заметок, которые определяют местоположения всех апельсинов в массиве. Вместо того, чтобы перемещать оранжевый в массив, вы помещаете заметку, в которой говорится «третий оранжевый справа», и оставьте оранжевый на месте. Копирование ссылочного объекта просто копирует его примечание post-it.

+0

+1 только для ваших усилий и красивого анализа. –

0

Копирование просто

array[Index+1] = array[Index] 

Своп

var tmp = array[Index + 1]; 
array[Index+1] = arry[Index]; 
array[Index] = tmp; 

Move также зависит от того, что вы хотите заменить перенесенный элемент с, чтобы указать, что теперь пусто, что-то вроде

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

Смежные вопросы