删除数组的特定项

时间:2013-12-18 11:42:35

标签: c# arrays indexing

string[] columns

我想删除由int。

类型的变量指定的索引上的项目

我该怎么做?

我试过

columns.RemoveAt(MY_INT_HERE);

但显然这不起作用。

6 个答案:

答案 0 :(得分:8)

数组是不可变类,你不能更改它,你所能做的就是重新创建它:

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);

答案 1 :(得分:1)

您无法删除数组中的项目,因为C#数组的长度在创建时是固定的,之后无法更改。

您可以将相应的元素清空以除去字符串,或使用LINQ生成一个新数组,如下所示:

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

您需要在C#文件的顶部添加using System.Linq才能进行编译。

但是,使用List<string>将是更好的解决方案:

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

答案 2 :(得分: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)

您也可以使用扩展方法。

答案 3 :(得分:0)

尝试以下方法之一(取决于您的需要):

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

...否则你只需要创建一个长度比当前数组小1的新数组,并复制值。

如果您想要更灵活的内容,可以使用类似List<string>的内容,您可以使用RemoveAt()

答案 4 :(得分:0)

您无法删除它。您可以重新创建数组,或者我建议您使用List<string>

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

它将从List<String> columns

中删除第二个元素

答案 5 :(得分:0)

对于计算机来说,数组的运行速度更快,但对于程序员来说则更慢。您必须使用循环或其他方法找到该值,然后将该位置设置为null。最终会在数组中出现一个空白区域。你可以重新分配数组等等......

对于相对少量的数据更容易使用的是List。你可以做myList.RemoveAt(100);,它会很好用。