我有一个像这样的键值对:
var accounts = new List<KeyValuePair<int,int>>();
帐户的内容如下所示:
{[4,10000]}
{[4,19000]}
{[4,11000]}
{[4,12000]}
{[4,13036]}
{[4,47100]}
{[5,19300]}
{[5,32900]}
{[5,95800]}
{[6,95800]}
如何获取 accounts
中键值对的所有可能的组合这样我就有:
[{4,10000},{5,19300},{6,95800}],
[{4,10000},{5,32900},{6,95800}].....
包含最终结果的数据结构对我来说并不重要,我只是对尽可能高效地实现这一点感兴趣
最佳答案
经过短暂搜索后,我发现您可以使用 CartesianProduct Extension Method 来做到这一点来自Eric Lippert's Blog :
var result = list.GroupBy(t => t.Key).CartesianProduct();
正如它正在做的:
static IEnumerable<IEnumerable<T>> CartesianProduct<T>(
this IEnumerable<IEnumerable<T>> sequences)
{
IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
return sequences.Aggregate(
emptyProduct,
(accumulator, sequence) =>
from accseq in accumulator
from item in sequence
select accseq.Concat(new[] {item}));
}
关于c# - 在 C# 中获取键值对列表的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075173/