2013-12-18 7 views
1
string[] columns 

Я хочу удалить элемент по индексу, указанному переменной типа int.Удаление определенного элемента массива

Как это сделать?

Я попытался

columns.RemoveAt(MY_INT_HERE); 

Но, видимо, это не работает.

+0

Этот синтаксис неправильный –

+0

Вы хотите сказать «Удалить из самой структуры»? Не могли бы вы быть более ясными? –

ответ

6

Массив неизменны класс, вы не можете изменить это, все, что вы можете сделать воссоздают его:

List<String> list = columns.ToList(); // <- to List which is mutable 
list.RemoveAt(MY_INT_HERE);   // <- remove 
string[] columns = list.ToArray(); // <- back to array 

Может быть лучшим решением является редизайн код: изменить неизменяемый массив в List<String>:

List<String> columns = ... 
    columns.RemoveAt(MY_INT_HERE); 
+0

.ToArray НЕ ПРОИСХОДИТ в моей среде IDE, почему так? –

+0

@Anoushka Seechurn: Извините, я сделал синтаксическую ошибку, List.RemoveAt возвращает void, а не список; см. мое редактирование –

+0

с использованием 'List ' вместо 'array' всегда является' нехорошей' практикой .. он 'зависит от цели ... всегда использует' array', когда вы выполняете другой 'поиск' .. – Moumit

0

Выполните одно из следующих действий (в зависимости от того, что вам нужно):

columns[MY_INT_HERE] = null; 
columns[MY_INT_HERE] = string.Empty; 

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

Если вы хотите что-то более гибкое, вы можете использовать что-то вроде List<string>, где вы можете использовать RemoveAt()

+0

Я не могу перейти к списку. –

1

Вы не можете удалять элементы в массиве, поскольку длина массива C# фиксируется в момент создания и не может быть изменена после этого.

Вы можете обнулять соответствующий элемент, чтобы избавиться от строки, или использовать LINQ для создания нового массива, например:

columns = columns.Take(MY_INT_HERE-1).Concat(columns.Skip(MY_INT_HERE)).ToArray(); 

Вам нужно добавить using System.Linq в верхней части файла C# в порядок для этого.

Однако, используя List<string> будет лучшим решением:

List<string> columns; 
columns.RemoveAt(MY_INT_HERE); 
0

Вы не можете удалять it.You может воссоздать массив или я советую вам использовать List<string> то же самое.

List<string> columns = new List<string>(); 
columns.RemoveAt(1); 

Это удалит 2-го элемента из ваших List<String>columns

0

Массивы быстрее компьютер работать, но медленнее, для программиста. Вам нужно будет найти это значение с помощью цикла или некоторых других средств, затем установите для этой позиции значение null. В итоге вы получите пустое пространство в массиве. Вы можете перераспределить массив и т. Д. И т. Д.

Что можно использовать для относительно небольших объемов данных, является List. Вы можете сделать myList.RemoveAt(100);, и он будет работать красиво.

1

Если вы не хотите использовать LINQ вы можете использовать эту функцию:

public string[] RemoveAt(string[] stringArray, int index) 
{ 
    if (index < 0 || index >= stringArray.Length) 
    return stringArray; 
    var newArray = new string[stringArray.Length - 1]; 
    int j = 0; 
    for (int i = 0; i < stringArray.Length; i++) 
    { 
    if(i == index)continue; 
    newArray[j] = stringArray[i]; 
    j++; 
    } 
    return newArray; 
} 

Вы можете использовать его так: columns = RemoveAt(columns, MY_INT_HERE)

Вы также можете сделать это метод расширения.

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