我有一系列的文件对象,它们都有一个签名者对象数组作为字段,对于包对象,我需要在包中包含的每个文件中包含一个所有签名者对象的数组。目前,我正在使用这段代码来实现相同的结果,但是我认为使用LINQ可以简化和改进这一点。
foreach(var file in files) { holder.AddRange(file.signers); } holder.Select(x => x).Distinct();
hlswsv351#
您可以使用SelectMany将签名者扁平化到一个列表中。也没有必要执行.Select(x => x),它本质上是一个无操作。
SelectMany
.Select(x => x)
holder .AddRange(files.SelectMany(file => file.signers)) .Distinct();
使用@Selvin建议的HashSet作为HashSet不能包含重复条目,因此不需要任何与Distinct()等效的项
Distinct()
// Earlier HashSet<T> holder; holder.UnionWith(files.SelectMany(file => file.signers));
von4xj4u2#
试试这个
files .Select(file => file.signers) //For each file in files return the file.signers prop .SelectMany(signers => signers) //Flatten the multiple enumerables of signer to one enumerable of strings .Distinct() .ToArray(); // Cast enumerable to Array
2条答案
按热度按时间hlswsv351#
您可以使用
SelectMany
将签名者扁平化到一个列表中。也没有必要执行
.Select(x => x)
,它本质上是一个无操作。哈希集版本
使用@Selvin建议的HashSet作为HashSet不能包含重复条目,因此不需要任何与
Distinct()
等效的项von4xj4u2#
试试这个