gpt4 book ai didi

c# - 从相同类型的 IEnumerable 中选择唯一/不同的值组合

转载 作者:行者123 更新时间:2023-11-30 19:41:07 25 4
gpt4 key购买 nike

我有三个相同类型(字符串)的 IEnumerable,我想从中获取值的唯一组合。不太确定如何在此处实现 LINQ。

Input data would look like this, one column represents one IEnum

通过添加 - 作为分隔符,结果应该是这样的列表

a-p-1
b-q-4
b-r-7
c-s-8
c-s-9
d-t-10
e-u-11

数据本身是唯一连接的。一个帐户中的所有项目都是唯一的,特定项目的所有子项目也是如此。

最佳答案

您不应该将相关项目存储在单独的序列中;那是一种反模式。但是,如果这恰好是您的数据可用的方式,您可以先使用 Zip 组合序列中的项目,然后使用 Distinct 获取唯一值。

var result = accounts.Zip(projects, (a, p) => a + "-" + p)
.Zip(subprojects, (a, s) => a + "-" + s)
.Distinct()
.ToList();

编辑:本着Servy's answer的精神, 这是压缩任意数量序列的扩展方法:

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));
}
}

这就是它的消费方式:

string[][] sequences = { accounts, projects, subprojects };
var results = sequences.Zip(items => string.Join("-", items))
.Distinct()
.ToList();

关于c# - 从相同类型的 IEnumerable 中选择唯一/不同的值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050448/

25 4 0