string[] columns
我想删除由int。
类型的变量指定的索引上的项目我该怎么做?
我试过
columns.RemoveAt(MY_INT_HERE);
但显然这不起作用。
答案 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);
,它会很好用。