-2

我有 2 个集合 col1 和 col2。我想从 col1 中选择记录在 col2 中不匹配。在 col1 中有 0 到 6,在 col2 中有 1 到 6 个数字,我想要 0 因为 0 在 col2 中不匹配。

两个集合的类型不同,在两个集合中都有一个字段 ID。

我正在使用 c# 4.0(Linq)。

4

3 回答 3

4

你需要的Except方法:

var yourResult = col1.Except(col2);

如果您的两个集合不是同一类型,那么您将不得不进行更昂贵的O(nm)搜索:

var selectedTwo = col2.Select(x => x.ID).ToHashSet();
var yourResult = col1.Where(n => !selectedTwo.Contains(n.ID));

在您的代码中的其他地方:

public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
    return new HashSet<T>(source);
}
于 2013-07-17T07:24:08.230 回答
1

对于不同的收藏,你可以试试这个

var outputarray = 
                  FirstList.Except(
                  (from first in FirstList
                  join second in SecondList
                  on first.id equals second.id
                  select first).ToList());
于 2015-12-09T11:17:14.327 回答
0

假设 ur 的类型collectionstringthn

var resultCol = new List<string>();

col1.ToList().ForEach(item => {
    if(!col2.Contains(item))
        resultCol.Add(item);
});
于 2013-07-17T07:28:10.330 回答