【问题标题】:C# Proper format of a Nested foreach loop?C#嵌套foreach循环的正确格式?
【发布时间】:2014-09-16 10:05:59
【问题描述】:

我需要遍历一个包含字符串句子的列表,并从另一个列表中找到包含字符串单词的句子,并将它们添加到单独的列表中以进行显示。下面的代码多次打印出同一个句子,所以我想知道嵌套 foreach 循环的正确格式是什么?

 List<string> sentenceList = new List<string>();
        sentenceList.Add("Dog ate a bone");
        sentenceList.Add("Cat had a ball and bone");

        List<string> keywords = new List<string>();
        keywords.Add("bone");
        keywords.Add("Cat")

 List<string> NewList = new List<string>();

            foreach (string sentence in sentenceList)
            {
                foreach (string word in keywords)
                {
                    if (sentence.Contains(word))
                    {
                        NewList.Add(sentence);
                    }
                }
            }

我得到的输出:

狗吃了骨头

猫有骨头和骨头

猫有骨头和骨头

我希望每个句子显然只出现一次,但为什么它会重复两次?我做错了什么?

【问题讨论】:

  • 我被重复了,因为第二句话包含两个关键字(bone 和 Cat)。

标签: c# list loops foreach nested


【解决方案1】:

它再次添加是因为您没有检查sentence 是否已存在于列表中。

你可以检查它是否已经存在,不要添加它:

if (sentence.Contains(word))
{
  if(!NewList.Contains(sentence))
     NewList.Add(sentence);
}

你的代码:

foreach (string sentence in sentenceList)
{
   foreach (string word in keywords)
   {
      if (sentence.Contains(word))
      {
         if(!NewList.Contains(sentence))
            NewList.Add(sentence);
      }
   }
}

【讨论】:

    【解决方案2】:

    在两个句子中,“bone”是同一个词 您的关键字列表应包含

    List<string> keywords = new List<string>();
            keywords.Add("Dog"); // or  keywords.Add("ate")
            keywords.Add("Cat")
    

    【讨论】:

    • 这并不能解决问题,如果处理得当,应该将两个句子都显示一次。
    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2016-10-10
    • 1970-01-01
    • 2019-07-13
    • 2016-05-28
    相关资源
    最近更新 更多