2011-05-20 177 views
4

,大家下午好C#比较阵列

的问题是有点简单,但我一直有问题,整个下午

我有2所列出:的整数(IDS)

  • 列表
  • 对象(包含IDS)

,我想对它们进行比较,但我的

  • 名单希望获得不具有一对ID(如果它存在)

    我想知道是否有交流#或LINQ方法,以确定在两个阵列

    例如

    是不同的值如果我有

    List<int> ids = {1,2,3,4,5} 
    

    List<objectX> x = (contains id,code, and description) 
    

    和我正在试图像

    foreach (int id in ids) 
         { 
          foreach (objectX item in x) 
          { 
           if (item.id == id) 
           { 
            break; 
           } 
           else 
            idDiferentes.Add(id); 
          } 
         } 
    

    但是像你可以想像它例如不

    ids= {1,2,3,4} 
    objectx[id] ={1,3,2} 
    

    的ID是不同的,当我对它们进行比较,所以我得到一个更大的名单的一个我的工作

    需要

    我也试过用LINQ外连接,但我不明白它是如何工作得很好的

  • +1

    'if(item.id!= id)idDiferentes.Add(id)',请不要使用“u”而不是“you”和“i”而不是“I”。 – khachik 2011-05-20 20:05:15

    回答

    10
    var idsWithoutObjects = ids.Except(x.Select(item => item.id)); 
    
    +0

    +1除了 – 2011-05-20 20:06:49

    +0

    谢谢你这是非常有用的 – 2011-05-20 21:26:38

    7

    你在追求的是Except扩展方法。它给你两个序列之间的设置差异。

    所以,你可以做这样的事情(伪C#-code):

    var idDifferences = x.Select(item => item.id).Except(ids); 
    
    1

    作为替代LINQ(虽然LINQ很可能是这里的正确答案),如果所有的ID是唯一的,你是能够使用Contains()方法,例如:

    foreach(objectX item in x) 
    { 
        if(!ids.Contains(item.id)) 
        { 
         idDiferentes.Add(item.id); 
        } 
    } 
    
    +0

    +1显示一个解决方案之外Linq – 2011-05-20 20:08:04

    0

    这是更容易使用的标记,例如:

    bool b = False; 
    
    foreach (int id in ids) 
         { 
          foreach (objectX item in x) 
          { 
           if (item.id == id) 
           { 
            b = True; 
            break; 
           } 
          } 
         } 
    
    if (!b) 
    { 
        idDiferentes.Add(id); 
    } 
    
    +0

    这不会编译。除其他问题外,你在外部'foreach'之外有'if(!b)','id'不在范围之内。 – 2011-05-20 20:14:43

    +0

    Excelent Guys非常感谢您的帮助,感谢您我可以解决我的问题 – 2011-05-20 21:26:09

    3

    Linq Set操作:

    int[] A = { 1 , 2 , 3 , 4 , 5 ,  } ; 
    int[] B = {  2 , 3 , 4 , 5 , 6 , } ; 
    
    int[] A_NotIn_B = A.Except(B).ToArray() ; 
    int[] B_NotIn_A = B.Except(A).ToArray() ; 
    

    你走了。

    +0

    非常感谢您很高兴知道如何申请 – 2011-05-20 21:27:50