Ind*_*igo 2 .net c# linq ienumerable
我有三个相同类型的IEnumebles(字符串),我想从中获得唯一的值组合.不太清楚如何在这里实现LINQ.

通过添加 - 作为分隔符,结果应该是这样的列表
ap-1
bq-4
br-7
cs-8
cs-9
dt-10
eu-11
数据本身具有独特的联系.一个帐户中的所有项目都是唯一的,特定项目的所有子项目也是如此.
您不应该将相关项目存储在单独的序列中; 这是一个反模式.但是,如果这恰好是您的数据可用的方式,您可以先使用序列组合序列中的项目Zip,然后使用它们Distinct来获取唯一值.
var result = accounts.Zip(projects, (a, p) => a + "-" + p)
.Zip(subprojects, (a, s) => a + "-" + s)
.Distinct()
.ToList();
Run Code Online (Sandbox Code Playgroud)
编辑:根据Servy的回答,这里是一个用于压缩任意数量的序列的扩展方法:
public static partial class EnumerableExtensions
{
public static IEnumerable<TResult> Zip<TSource, TResult>(
this IEnumerable<IEnumerable<TSource>> sequences,
Func<IEnumerable<TSource>, TResult> resultSelector)
{
var enumerators = sequences.Select(sequence => sequence.GetEnumerator()).ToArray();
while (enumerators.All(enumerator => enumerator.MoveNext()))
yield return resultSelector(enumerators.Select(enumerator => enumerator.Current));
}
}
Run Code Online (Sandbox Code Playgroud)
这就是它的消费方式:
string[][] sequences = { accounts, projects, subprojects };
var results = sequences.Zip(items => string.Join("-", items))
.Distinct()
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3146 次 |
| 最近记录: |