2

次のようなキーと値のペアがあります。

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}].....

最終結果を含むデータ構造は私にとってそれほど重要ではありません。できるだけ効率的にこれを達成することに興味があります

4

1 に答える 1

2

短い検索の後、 Eric Lippert のブログのCartesianProduct 拡張メソッドを使用して実行できることがわかりました。

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})); 
}
于 2013-09-29T06:41:04.850 に答える