それぞれ可変長の文字列のリストがあります。長さが 5 に等しい元のリストから文字列を連結したリストからサブセットを射影したいのですが、集計関数を使用していますが、目的の結果が得られません。このプロジェクションに適した LINQ クエリはどれですか? 助けていただけますか?
コード:
class Program
{
static void Main(string[] args)
{
IEnumerable<string> items = new List<string> {"abc", "ab", "abcd", "abcde", "abcdef", "a", "ab", "cde"};
//All combinations of concatenations equal to length 5.
//Only need to process an item once and need to concatenate 2 items and no more
var filteredList = items.Where(x => x.Length < 5)
.Aggregate(Execute).ToList();
foreach (var f in filteredList)
{
//Should out put : abc+ab = abcab
//Should out put : abcde
//Should out put : abcd+a = abcda
//Should out put : ab+cde = abcde
Console.WriteLine(f);
}
}
private static string Execute(string a, string b)
{
if (string.IsNullOrEmpty(a) || string.IsNullOrEmpty(b))
return null;
if ((a.Length + b.Length) == 5)
return a + b;
return null;
}
}
ポイントのカップル:
アイテムが処理されると、組み合わせのためにそのアイテムを再度考慮する必要はありません
リストで同じアイテムが再び見つかるまで、上記は当てはまります。見つかったら、以前の連結で使用されなかった別のアイテムと連結する必要があります。
LINQ である必要はありません。解決策を探しているだけです。
出力は 3 つ以上の文字列で構成できませんか? (a + bc + de) は必要ありません。
項目は、それ自体と連結する必要はありません。
質問の一部として出力について言及しました。
注: .NET 3.5 を使用しています (ただし、可能であれば .NET 4.0 にもショートカットを表示したいと考えています)。