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

我相信这个问题可以通过SelectManyand解决Distinct

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

第二个变量名称具有误导性。除其他字母外,它将返回一个 的实例"m",该实例在原始集合中不是唯一的;)

于 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 回答