c#比较数组

c#比较数组,c#,linq,list,C#,Linq,List,各位下午好 问题有点简单,但我整个下午都有问题 我有两份清单: INT(ID)列表 对象列表(包含ID) 我想比较它们,但我想获得没有配对的id(如果存在) 我想知道是否有c#或linq方法来识别两个数组中不同的值 范例 如果我有 List<int> ids = {1,2,3,4,5} 但就像你能想象的那样,它不起作用 比如说 ids= {1,2,3,4} objectx[id] ={1,3,2} 当我比较它们时,ID是不同的,所以我得到了一个我需要的更大的列表 我还尝试了l

各位下午好

问题有点简单,但我整个下午都有问题

我有两份清单:

  • INT(ID)列表
  • 对象列表(包含ID)
我想比较它们,但我想获得没有配对的id(如果存在)

我想知道是否有c#或linq方法来识别两个数组中不同的值

范例

如果我有

List<int> ids = {1,2,3,4,5}
但就像你能想象的那样,它不起作用

比如说

ids= {1,2,3,4}
objectx[id] ={1,3,2}
当我比较它们时,ID是不同的,所以我得到了一个我需要的更大的列表

我还尝试了linq外部联接,但我不明白它是如何工作的

您所追求的是扩展方法。它给出了两个序列之间的集差

var idsWithoutObjects = ids.Except(x.Select(item => item.id));
所以你可以这样做(伪c代码):

作为LINQ的替代方案(尽管LINQ可能是这里的正确答案),如果您的所有ID都是唯一的,您可以使用
Contains()
方法,例如:

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

使用标志更容易,例如:

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);
}
Linq集合操作:

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() ;

好了。

如果(item.id!=id)iddifferentes.Add(id)
,请不要用“u”代替“you”,也不要用“i”代替“i”。这不会编译。在其他问题中,您的
if(!b)
位于外部
foreach
之外,并且
id
已不在范围内。优秀的家伙非常感谢您的帮助,感谢您我可以解决我的问题谢谢您这非常有用
foreach(objectX item in x)
{
    if(!ids.Contains(item.id))
    {
        idDiferentes.Add(item.id);
    }
}
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);
}
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() ;