質問
私は、すべてのセットの要素が最終的な組み合わせに固定された場所を持っているような方法で4セットの要素の異なる組み合わせを生成できる方法を探しています。探しています:
set#1(通りの前方向){n、s}セット#2(ストリート名){フランクフォード、ベイリー}セット#3(ストリートタイプ){ave、st} set#4(street post direction){s}
期待する組み合わせをほとんどリストさせてください:
n Baily Ave s
S Frankford St s
S Baily AV s
.
.
.
今、あなたが見ることができるように、すべてのセットの要素がその場所に落ちていることがわかります
プリの方向が整っています1
ストリート名が整っています2
ストリートタイプが設置されています3
通りの説明が整っています4
私はこのタスクを実行するための最も効率的な方法を探しています。それを行う1つの方法は、次のような一度に2セットで作業することです。
セット1とセット2の組み合わせを作成します - >結果の組み合わせの新しいセット5を作成します
セット5とセット3の組み合わせを作成します - >結果の組み合わせの新しいセット6を作成します
セット6とセット4の組み合わせを作成します - >これは私に最終的な組み合わせを与えます
これをするための最良の方法はありますか?親切に助けてください。 C#またはJavaを好みます。
ありがとう
解決 3
@ David B Predirectionsリストが空である場合は、Cartesian製品が返されないため、組み合わせを獲得する方法があります。
ここのデビッドB:
var query =
from d in predirections.DefaultIfEmpty()
from n in names.DefaultIfEmpty()
from t in types.DefaultIfEmpty()
from s in postdirections.DefaultIfEmpty()
select new {d, n, t, s};
他のヒント
すべての組み合わせを提供するLinq(C#)がありますが、「最も効率的な方法」ではありません。
var query =
from d in predirections
from n in names
from t in types
from s in postdirections
select new {d, n, t, s};
いくつかのセットのデカルト製品を探しているように聞こえます。ネストされたループを使用してそれを行うことができます。これがあなたが求めなかったHaskellコードです。
Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
["1A","1B","1C","2A","2B","2C","3A","3B","3C"]