3 つのグループごとにリストのすべての一意の順列を取得する方法を探していました。ダウンロードするソース コードと複雑なアルゴリズムがたくさん見つかりました。
私はついに、うまくいくと思われる独自のコードを思いつきました。以下が良い考えではない理由を誰か教えてください。私が見つけたすべての複雑な解決策のために見落としているものがあるに違いないと思いますが、私のものは単純すぎるようです。
var combinations = from a in Samples
from b in Samples
from c in Samples
where (string)a.sample != (string)b.sample
&& (string)a.sample != (string)c.sample
&& (string)b.sample != (string)c.sample
select new Rank
{
sample = a.sample,
sampleb = b.sample,
samplec = c.sample
};
foreach (var combo in combinations)
{
string[] aut = { combo.sample, combo.sampleb, combo.samplec };
Array.Sort(aut);
combo.sample = aut[0];
combo.sampleb = aut[1];
combo.samplec = aut[2];
l.Add(combo);
}
noDupes = from n in l
group n by new { n.sample, n.sampleb, n.samplec } into g
select new Rank
{
sample = g.Key.sample,
sampleb = g.Key.sampleb,
samplec = g.Key.samplec
};