0

私はLinqが初めてで、SQLクエリの1つをC#に変換してこれを達成しようとしています。次の一連の文字列があるとします。

ABC-pqr-cv3-xa
LKJ-eqq-cb2-ya
POI-qqq-aaa-1
ABC-pqr-cv3-xb
UIO-qqq-xa
LKJ-eqq-cb2-za
POI-qqq-aaa-2
UIO-qqq-xb
LKJ-eqq-cb2-yb
POI-qqq-aaa-3

最後の文字を除いて文字列全体が一致するかどうかに基づいて、これらの文字列をグループ化したいと考えています。したがって、私が期待している出力は次のとおりです。

ABC-pqr-cv3-xa -- 1
ABC-pqr-cv3-xb -- 1

LKJ-eqq-cb2-ya -- 2
LKJ-eqq-cb2-yb -- 2

UIO-qqq-xa -- 3
UIO-qqq-xb -- 3

POI-qqq-aaa-1 -- 4
POI-qqq-aaa-2 -- 4
POI-qqq-aaa-3 -- 4

LKJ-eqq-cb2-za -- 5

これを単純に行うには、O(n^2) 回の比較が必要になります。これを達成するためのより良い方法はありますか?グループの番号付け自体は重要ではありません。私は現在これを試しており、効率的な方法を見つけたら回答を投稿します。

4

2 に答える 2

1

私は支出者の答えの簡潔さが本当に好きですが、より多くの SQL linq 構文を使用してもう少し長いものを追加すると思いました (それはあなたがよく知っているものだからです)。そのほとんどはセットアップと出力です:-)

        var d =
@"ABC-pqr-cv3-xa
LKJ-eqq-cb2-ya
POI-qqq-aaa-1
ABC-pqr-cv3-xb
UIO-qqq-xa
LKJ-eqq-cb2-za
POI-qqq-aaa-2
UIO-qqq-xb
LKJ-eqq-cb2-yb
POI-qqq-aaa-3";
        var lines = d.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
        var grp = from line in lines
                  group line by line.Substring(0, line.Length - 1) into g
                  select g;
        int i = 1;
        foreach (var g in grp) {
            Console.WriteLine(i++);
            foreach (var s in g) {
                Console.WriteLine("\t{0}", s);
                }
            }
于 2013-11-01T03:41:49.617 に答える