c# - 在 C# 中获取键值对列表的所有可能组合

标签 c# algorithm list data-structures keyvaluepair

我有一个像这样的键值对:

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/

相关文章:

c# - 字符串的 LINQ 部分包含在列表成员中

c# - 存储库层是否应该返回数据传输对象 (DTO)?

algorithm - 如何用它的 BFS 和 DFS 遍历构造一棵树

java - 有没有办法进一步优化Graham Scan算法来找到凸包?

python - 将 Python 列表插入 mySQL 数据库中的单个列

c# - asp.net core 操作中参数的映射命名约定

javascript - 将数字四舍五入到最接近的 9

java - 无法迭代传递给方法的列表

Python:搜索元组列表,删除整个索引

c# - 使用 visual-studio 在 C#.net 中玩按钮