这是我的代码:
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 :(得分: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
的每次迭代中使用newValues
与myValues
进行除外,以便您只对已经不在的项目进行迭代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
循环并返回外部。