循环两个列表后,如何在一次迭代后停止内循环?

时间:2014-07-18 16:39:13

标签: c# .net

这是我的代码:

List<int> myValues = new List<int>(new int[] { 5, 9, 3, 4, 7, 12, 0, 15 });
List<int> newOnly = new List<int>(new int[] { 5, 7, 1, 11, 7, 19, 76, 18 });
List<int> newValues = new List<int>();

for (int i = 0; i < myValues.Count; i++){
    for (int x = 0; x < newOnly.Count; x++){
        if (!myValues.Contains(newOnly[x])){
                        newValues.Add(newOnly[x]);
        }
    }
}

我想检查一下newOnlymyValues中的项目是否已经存在。现在我最终得到了newValues 40项,我应该只得到9项。

3 个答案:

答案 0 :(得分:3)

您不需要外部for循环,因为您没有在任何地方索引到myValues。对当前代码的简单修复是:

for (int x = 0; x < newOnly.Count; x++){
    if (!myValues.Contains(newOnly[x]))
        newValues.Add(newOnly[x]);
}

有更好的解决方案 - 正如使用LINQ的评论中提到的那样,这将是一个不错的选择。

答案 1 :(得分:0)

我认为你想要更新你的if条件,以确保你没有在newValues列表中添加重复的引用:

for (int i = 0; i < myValues.Count; i++)
        {

            for (int x = 0; x < newOnly.Count; x++)
            {
                if (!myValues.Contains(newOnly[x]) && !newValues.Contains(newOnly[x]))
                {
                    newValues.Add(newOnly[x]);

                }
            }

        }

当然,这可能不是最有效的方法,因为无论何时你都会遍历完整的newOnly列表。

您可能希望在newOnly的每次迭代中使用newValuesmyValues进行除外,以便您只对已经不在的项目进行迭代newValues

答案 2 :(得分:0)

因为其他人已经回答了如何修复你的代码,所以这里有一个回答你如何停止内循环的问题:

查看break关键字:http://msdn.microsoft.com/en-us/library/adbctzc4.aspx

for (int i = 0; i < 10; i++)
{
     for (int x = 0; x < 20; x++)
     {
         if (x == 5)
            break;
     }
}

如果if条件命中,它将退出内部for循环并返回外部。