4

foreach ループを使用せずに、次の問題に対して LINQ ステートメントを定義することは可能ですか?

public class GroupObject
{
    public String name;
    public List<String> letters;

    public void test()
    {
        List<GroupObject> myGroups = new List<GroupObject> {
            new GroupObject {
                name="test1",
                letters=new List<String>{"x","y","z"}
            },
            new GroupObject {
                name="test2",
                letters=new List<String>{"l","m","n"}
            },
            new GroupObject {
                name="test3",
                letters=new List<String>{"m","x","z"}
            }
        };

        // LINQ problem 1: how to get a list of all 9 letters
        // List<string> allLetters = (from ...).ToList();

        // LINQ problem 2: how to get a list of all 6 DISTINCT letters
        // List<string> allDistictLetters = (from ...).ToList();
    }
}

この質問を書いているときに、問題の解決策を見つけました。これは私にとって本当のバグだったので、私はまだ質問を投稿(および回答)します。そして、ここで適切な既存の質問が見つかりませんでした。

チャオ、ユーベ

4

2 に答える 2

6

この問題は と で解決できると思いSelectManyますDistinct

var allLetters = myGroups.SelectMany(go => go.letters);
var allUniqueLetters = allLetters.Distinct();

2 番目の変数名は誤解を招きます。他の文字とともに、元のコレクションで一意で"m"なかった の 1 つのインスタンスを返します ;)

于 2010-07-16T09:58:02.527 に答える
0

上記のように、私は自分で答えを見つけました:

List<string> allLetters = (from g in myGroups from l in g.letters select l).ToList();
List<string> allDistinctLetters = allLetters.Distinct().ToList();

これが誰かの役に立てば幸いです。

チャオ、ユーベ

于 2010-07-16T10:00:06.737 に答える