首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除正则数组的元素

删除正则数组的元素
EN

Stack Overflow用户
提问于 2009-01-19 12:36:38
回答 13查看 469.5K关注 0票数 149

我有一个Foo对象数组。如何删除数组的第二个元素?

我需要一些类似于RemoveAt()的东西,但是需要一个常规的数组。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-01-19 12:56:14

如果您不想使用List:

代码语言:javascript
复制
var foos = new List<Foo>(array);
foos.RemoveAt(index);
return foos.ToArray();

你可以尝试这个我没有实际测试过的扩展方法:

代码语言:javascript
复制
public static T[] RemoveAt<T>(this T[] source, int index)
{
    T[] dest = new T[source.Length - 1];
    if( index > 0 )
        Array.Copy(source, 0, dest, 0, index);

    if( index < source.Length - 1 )
        Array.Copy(source, index + 1, dest, index, source.Length - index - 1);

    return dest;
}

并像这样使用它:

代码语言:javascript
复制
Foo[] bar = GetFoos();
bar = bar.RemoveAt(2);
票数 220
EN

Stack Overflow用户

发布于 2009-01-19 12:41:12

数组的本质是它们的长度是不可变的。您不能添加或删除任何数组项。

您必须创建一个少了一个元素的新数组,并将旧项复制到新数组中,但不包括要删除的元素。

因此,使用列表可能比使用数组更好。

票数 79
EN

Stack Overflow用户

发布于 2010-12-13 02:42:40

我使用此方法从对象数组中删除元素。在我的情况下,我的数组长度很小。因此,如果您有大型数组,则可能需要另一个解决方案。

代码语言:javascript
复制
private int[] RemoveIndices(int[] IndicesArray, int RemoveAt)
{
    int[] newIndicesArray = new int[IndicesArray.Length - 1];

    int i = 0;
    int j = 0;
    while (i < IndicesArray.Length)
    {
        if (i != RemoveAt)
        {
            newIndicesArray[j] = IndicesArray[i];
            j++;
        }

        i++;
    }

    return newIndicesArray;
}
票数 68
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/457453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档