如何从C#中的列表中删除字符串数组?

时间:2018-04-22 08:20:53

标签: c# arrays string list

我无法解决这个问题:如何从列表中删除字符串数组?

所以代码如下:

List<string[]> theList = new List<string[]>();
string[] myStringarray = new string[] { a, b, c };
theList.Add(myStringarray);

这里的问题是我希望用户能够为字符串数组创建新的字符串,然后将其放入List中 - 这已经解决了,如上所示。

但是,如何删除列表中的一个字符串数组?我已经尝试将List转换为Jagged数组和几种方法,但我似乎无法找到解决这个特定问题的方法。

5 个答案:

答案 0 :(得分:3)

如果您已经删除了要删除的字符串数组,则可以使用Remove()方法:

 List<string[]> theList = new List<string[]>();
 string[] myStringarray = new string[] { "a", "b", "c" };
 theList.Add(myStringarray);

 //remove myStringarray from the main list
 theList.Remove(myStringarray);

但是,如果您从用户那里获取项目并且想要搜索包含这些元素的数组并将其删除,我建议您创建如下的扩展方法:

public static class ExtensionMethods
{
    public static string[] FindAndRemove(this ICollection<string[]> list, string[] items)
    {
        string[] removedList = null;
        foreach (var stringArray in list)
        {
            if (stringArray.SequenceEqual(items))
            {
                removedList = stringArray;
                break;
            }
        }
        if (removedList != null)
        {
            list.Remove(removedList);
        }
        return removedList;
    }
}

主要是搜索第一个数组,其元素等于项数组中的传递元素(参数)并将其删除,您可以进一步改进此方法并使其删除满足条件的所有列表,如下所示: / p>

 public static class ExtensionMethods
 {
    public static int FindAndRemove(this List<string[]> list, string[] items)
    {
        return list.RemoveAll(arr => arr.SequenceEqual(items));
    }
 }

这里我使用了Linq库中的RemoveAll,它删除了满足给定条件的所有列表。 请注意,SequecnceEqual也存在于linq库中并用于:

  

通过使用类型的默认相等比较器来比较元素,确定两个序列是否相等。

答案 1 :(得分:0)

我会使用List.RemoveAll(https://msdn.microsoft.com/en-us/library/wdka673a(v=vs.110).aspx

删除所有采用谓词函数,这将允许您找到要删除的任何项目。

例如,如果包含的数组中包含特定值。

答案 2 :(得分:0)

您只需使用Remove功能:

List<string[]> theList = new List<string[]>();
string[] myStringarray = new string[] { a, b, c };
theList.Add(myStringarray);
theList.Remove(myStringarray);

删除()删除指定的元素 RemoveAt()删除指定索引处的元素 RemoveAll()删除与提供的谓词函数匹配的所有元素。

如果要检查阵列是否匹配。你可以使用:

for(int i=0;i<theList.Count();i++)
{
    bool areEqual =theList[i].SequenceEqual(newStringArray);
    if(areEqual)
      theList.RemoveAt(i);
}

答案 3 :(得分:0)

对于带有谓词的RemoveAll,我将遵循以下内容(通过数组中的avalue删除)

        List<string[]> theList = new List<string[]>();
        string[] myStringarray = new string[] { "a", "b", "c" };
        theList.Add(myStringarray);
        theList.Add(new string[] { "d", "e", "f" });            
        theList.RemoveAll(zz => zz.Where(xx => xx == "b").Count() > 0);

答案 4 :(得分:-2)

  • 拿迭代器.........

      

    阻止报价

    Iterator itr = list.iterator(); while(itr.hasNext()){//某些条件 itr.remove(); }

      

    阻止报价

    .......

相关问题