如何将List <T>分成两个列表,一个包含所有重复值,另一个包含其余值?

埃克拉斯克

我有一个Account的基本类(为简便起见,删除了其他属性):

public class Account
{
    public string Email { get; set; }
}

我有一个List<T>这样的帐户。

我可以根据电子邮件地址轻松删除重复项:

var uniques = list.GroupBy(x => x.Email).Select(x => x.First()).ToList();

现在,名为“唯一身份”的列表仅包含每个基于电子邮件地址的帐户之一,所有重复帐户都将被丢弃。

我想做一些不同的事情,并将列表分成两部分。
一个列表将仅包含“ true”唯一值,另一列表将包含所有重复项。

例如,以下帐户电子邮件列表:

[email protected]
[email protected]
[email protected]

将被分为两个列表:

独特的
[email protected]

重复
[email protected]
[email protected]

通过使用顶部的示例创建唯一值列表,我已经能够实现这一目标。然后.Except()在原始列表上使用以获取重复项之间的差异。最后,我可以遍历每个重复项以将其“弹出”到唯一列表之外,然后将其移至重复项列表。

这是.NET Fiddle上的工作示例

我可以更有效地或在语法上分散列表吗?

如有必要,我很乐意使用第三方库,但我只想坚持使用LINQ。
我知道CodeReview,但觉得这个问题也适合这里。

阿图罗·门恰卡(Arturo Menchaca)
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将List <T>转换为包含另一个List <T>的另一个List <T>

将List <T>转换为另一个列表中所有对象的逗号分隔值列表

如何检查一个列表是否包含另一个列表的所有元素,包括重复项

将列表分成两部分-一个与第二个元素对应,另一个与所有其余元素对应

如何获得至少包含另一个列表的所有值的列表?

如何从List <T>检索项目,其中一个属性恰好包含另一个列表中的单词?

将字符串列表分成2个列表,一个包含单个值,另一个包含多个

如何将一个大的 zip 值列表分成两个列表?

Excel:如何将一个现有列表中的ID号分配到另一个包含重复项的列表中

如何找到该列表包含另一个列表中的所有元素?

apt install -t如何将一个源与另一个源区分开?

如何将两个div彼此相邻放置,其中一个包含根据另一个div的大小缩放的图像?

当包含一个imageview和另一个线性布局时,如何将线性布局分为两个相等的部分

如何为两个变量编写一个SQL语句,一个包含表名,另一个包含表中的特定列?

python - 如何将列中的字典分成两个单独的列,其中一个是键列表,另一个是值列表

如何将Memory <T>转换为另一个

如何将泛型T发送到另一个线程?

是否有一个既包含List <T>又包含HashSet <T>的类型?

如何将一个列表分成两个列表并找到它们的长度?

如何基于另外两个 List<T> 创建一个新的 List<T> 并考虑重复项?

如何使用C#连接两个表,其中一个表包含MongoDB中另一个表的ID列表

如何通过与另一个集合的交集将一个集合分成两个集合?

如何检查 Python 列表是否包含另一个列表的元素重复未被忽略

将List <t> .add()添加到另一个列表

如何创建一个包含两个相同模式之间的所有字符串的列表

如何从具有两个键值对的字典列表中基于另一个kv对的值创建一个键值对中的值列表

如何检查列表列表的任何元素是否包含另一个列表的所有元素?

如何将公式的值(包含变量)分配给另一个变量

这两个以制表符分隔的 .txt 文件之间的区别是什么导致 .split("\t") 正确地将值与一个而不是另一个分开?