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);
}
检查线程列表中的索引0,如果列表中存在一个或多个单词,则移动一个并检查此列表中没有单词的单词的所有索引将删除它们。
如果在索引0中没有任何单词存在,则删除整个List并且不要使该行成为部分。
我首先要确定在任何列表的索引0处是否存在一个或多个单词,如果不是已经删除整个列表并继续下一个单词,则继续。
答案 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)));
}