2014-07-18 32 views
0

这里是我的代码:如何循环两个列表后,如何在一次迭代后停止内循环?

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]); 
     } 
    } 
} 

我要检查,如果在newOnly该项目在myValues已经存在一次。现在最后我得到newValues 40个项目,我应该只有9.

+0

要开始....为什么你迭代myValues而不只是newOnly? –

+4

删除并且使用LINQ。 –

+0

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

回答

0

我想你会需要更新,如果条件以确保您不添加到列表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列表。

你可能想在每次迭代过myValuesnewValues做一个除了在newOnly,使你只迭代已经不在newValues

3

你不需要你的外循环,因为你不是索引到任何地方的myValues。一个简单的修复到当前的代码如下:

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

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

0

因为别人已经回答了如何解决你的代码的项目,这里是一个回答您的如何阻止内环问题:

查找到关键字breakhttp://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循环并返回到外部。