我有一个Account的基本类(为简便起见,删除了其他属性):
public class Account
{
public string Email { get; set; }
}
我有一个List<T>
这样的帐户。
我可以根据电子邮件地址轻松删除重复项:
var uniques = list.GroupBy(x => x.Email).Select(x => x.First()).ToList();
现在,名为“唯一身份”的列表仅包含每个基于电子邮件地址的帐户之一,所有重复帐户都将被丢弃。
我想做一些不同的事情,并将列表分成两部分。
一个列表将仅包含“ true”唯一值,另一列表将包含所有重复项。
例如,以下帐户电子邮件列表:
将被分为两个列表:
通过使用顶部的示例创建唯一值列表,我已经能够实现这一目标。然后.Except()
,我在原始列表上使用以获取重复项之间的差异。最后,我可以遍历每个重复项以将其“弹出”到唯一列表之外,然后将其移至重复项列表。
我可以更有效地或在语法上分散列表吗?
如有必要,我很乐意使用第三方库,但我只想坚持使用LINQ。
我知道CodeReview,但觉得这个问题也适合这里。
var duplicates = list.GroupBy(x => x) // or x.Property if you are grouping by some property.
.Where(g => g.Count() > 1)
.SelectMany(g => g);
var uniques = list.GroupBy(x => x) // or x.Property if you are grouping by some property.
.Where(g => g.Count() == 1)
.SelectMany(g => g);
或者,一旦获得一个列表,就可以使用来获得另一个列表Except
:
var uniques = list.Except(duplicates);
// or
var duplicates = list.Except(uniques);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句