如何从列表中删除列表?

时间:2014-06-18 11:52:49

标签: c# .net winforms

public static List<List<string>> Threads = new List<List<string>>();

...

public static  void CheckIfResponseContainWords()
{
    foreach (var thread in Threads) {
        thread.RemoveAll(line => line == "" || 
                         !WordsList.words.Any(w => line.Contains(w)));
    }
}

Threads中,在这种情况下,我有50个列表。在List中有不同数量的索引。 在我遍历CheckIfResponseContainWords中的线程列表后,一些列表为空。 现在我想再次遍历Threads中的所有列表并删除所有空列表。 列出要删除的count = 0。

在检查单词是否不存在之后,也许有一种方法可以在CheckIfResponseContainWords方法中执行此操作? 但我的想法是在完成CheckIfResponseContainWords之后删除Threads中的空列表。

我该怎么做?

修改

public static  void CheckIfResponseContainWords()
    {
        // Here first to remove from all the Lists in Threads fir index ( index 0 ).
        foreach (var thread in Threads) {
            thread.RemoveAll(line => line == "" || 
                             !WordsList.words.Any(w => line.Contains(w)));
        }
    }

修改

另一个小问题。

public static  void CheckIfResponseContainWords()
        {
            foreach (var thread in Threads)
            {
                if (thread.Count > 0)
                    thread.RemoveAt(0);

                thread.RemoveAll(line => line == "" ||
                            !WordsList.words.Any(w => line.Contains(w)));
            }
            Threads.RemoveAll(list => list.Count == 0);
        }

在此之前:

if (thread.Count > 0)
                        thread.RemoveAt(0);

我想删除它并首先执行此操作:

thread.RemoveAll(line => line == "" ||
                                !WordsList.words.Any(w => line.Contains(w)));

但是如果任何List的索引0中的单词不存在,则删除整个List。 如果索引0中的任何线程列表中只存在一个或多个单词,则保留并删除整个List索引的单词。

看起来应该是这样的:

public static void CheckIfResponseContainWords()             {                 foreach(线程中的var线程)                 {

                // Check here every List in Threads index 0 if any word from words exist in it only in index 0. If it does then continue to the thread.RemoveAll(line.....and remove all words from the List.

但是如果在任何List in Threads索引0中没有单词存在则移除整个List并移动到下一个不要创建thread.RemoveAll(行....只是删除List。执行完所有后列出那些留下删除每个List的索引0:if(thread.Count&gt; 0)                     thread.RemoveAt(0);

                thread.RemoveAll(line => line == "" ||
                            !WordsList.words.Any(w => line.Contains(w)));
            }
            Threads.RemoveAll(list => list.Count == 0);
        }
  1. 检查线程列表中的索引0,如果列表中存在一个或多个单词,则移动一个并检查此列表中没有单词的单词的所有索引将删除它们。

  2. 如果在索引0中没有任何单词存在,则删除整个List并且不要使该行成为部分。

  3. 我首先要确定在任何列表的索引0处是否存在一个或多个单词,如果不是已经删除整个列表并继续下一个单词,则继续。

1 个答案:

答案 0 :(得分:2)

如果Threads是列表列表,那么要从中删除所有空列表,只需执行以下操作:

Threads.RemoveAll(list => list.Count == 0);

至于你的第二个问题:要删除列表的第一个元素(如果存在),只需执行以下操作:

if (thread.Count > 0)
    thread.RemoveAt(0);

所以你的循环会变成:

foreach (var thread in Threads)
{
    if (thread.Count > 0)
        thread.RemoveAt(0);

    thread.RemoveAll(line => line == "" || 
                !WordsList.words.Any(w => line.Contains(w)));
}