1

次のように、一部が繰り返される一連の単語が与えられます。

var words = "one two three two four five six four seven four eight".Split(' ');

次のように重複を見つけることができます。次のように単語をグループ化できます。

var g1 = words.GroupBy(w => w);

それがどのように見えるかを確認するために、それをLinq Query sytnaxに書き直そうとしていました(実際のコードでは、上記の行のようにそのままにしておくことを知っています!)。

私が思いついた Linq は、必要以上に複雑に見えます。どのように単純化できますか?そして、それは本当に上記の行と同じですか?

var g2 = from w in words group w by w into g select g;

(私は日曜日のブレインフェードをしていると思います... ;)

[編集] この驚きの私の情報源は、以前のこの質問への回答からのものでした。

4

2 に答える 2

5

クエリは重複を返さずDistinct()、個別のアイテムを返すため、拡張メソッドを簡単に使用できます 。

var dist = words.Distinct();

Distinct()構文クエリには同等のものはありません。

本当に重複を探している場合は、クエリを次のように変更する必要があります。

var g1 = words.GroupBy(w => w).Where(g => g.Count() > 1).Select(g => g.Key);

および構文クエリで

var g1 = from w in words
         group w by w into g
         where g.Count() > 1
         select g.Key;

ただし、2 番目のものはコンパイラによって最初のものに変換されます。

構文クエリを使用してこれを取得する簡単な方法はありません。

于 2013-04-14T09:18:57.697 に答える
2

上記は両方ともLINQバージョンです。1 つはメソッド式で、もう 1 つはクエリ式です。それらの間に違いはありません。

次が表示されます: LINQ のクエリ構文とメソッド構文 (C#)

クエリ構文を単純化するつもりなら、メソッド構文と同等であるため、あまり変更できないと思います。

于 2013-04-14T09:17:40.253 に答える