【发布时间】:2017-07-19 00:02:34
【问题描述】:
我有一个 Person 类,如下所示:
public class Person
{
public Person() { }
public Person(string name, int age, GenderType gender, string country) { Name = name; Age = age; Gender = gender; Country = country; }
public string Name { get; set; }
public int Age { get; set; }
public GenderType Gender { get; set; } // GenderType = M/F
public string Country { get; set; }
}
我想先根据性别将此列表分为两个列表。然后我想根据 Country 将每个列表进一步划分为子列表。因此,如果我在原始列表中有 n 个不同的国家/地区,那么最后我会得到 n 到 2n 个列表。下面的例子将进一步说明这个想法:
说我原来的列表是这样的:
Sam, 23, M, USA
Jon, 13, M, USA
Jen, 26, F, USA
Thilini, 25, F, Sri Lanka
Anna, 23, F, UK
Chelsea, 35, F, UK
Saman, 43, M, Sri Lanka
Dan, 27, M, UK
第一师:
Male lists:
Sam, 23, M, USA
Jon, 13, M, USA
Saman, 43, M, Sri Lanka
Dan, 27, M, UK
------------------
Female lists:
Jen, 26, F, USA
Thilini, 25, F, Sri Lanka
Anna, 23, F, UK
Chelsea, 35, F, UK
然后进一步细分列表:
Male sub-list 1:
Sam, 23, M, USA
Jon, 13, M, USA
Male sub-list 2:
Saman, 43, M, Sri Lanka
Male sub-list 3:
Dan, 27, M, UK
------------------
Female sub-list 1:
Jen, 26, F, USA
Female sub-list 2:
Thilini, 25, F, Sri Lanka
Female sub-list 3:
Anna, 23, F, UK
Chelsea, 35, F, UK
我可以很容易地使用 foreach 循环来做到这一点,并可能使用 Results 类来遍历每个项目。但我想了解如何使用 Linq GroupBy() 和 Distinct() 来做到这一点?
我使用 GroupBy() 将其根据 Gender 分为两个列表,如下所示。
static void Main(string[] args)
{
List<Person> people = new List<Person>()
{
new Person("Sam", 23, GenderType.M, "USA"),
new Person("Jon", 13, GenderType.M, "USA"),
new Person("Jen", 26, GenderType.F, "USA"),
new Person("Thilini", 25, GenderType.F, "Sri Lanka"),
new Person("Anna", 23, GenderType.F, "UK"),
new Person("Chelsea", 35, GenderType.F, "UK"),
new Person("Saman", 43, GenderType.M, "Sri Lanka"),
new Person("Dan", 27, GenderType.M, "UK")
};
var maleList = people.GroupBy(x => x.Gender).Where(y => y.Key == GenderType.M);
var femaleList = people.GroupBy(x => x.Gender).Where(y => y.Key == GenderType.F);
Console.ReadLine();
}
我不明白现在如何根据国家/地区再次将每个列表细分为多个列表。
【问题讨论】:
-
“我不明白现在如何根据国家/地区将每个列表再细分为多个” -- 为什么不呢?只需将
GroupBy()再次应用于您的每个maleList和femaleList对象。你有什么不明白的? -
@PeterDuniho 我知道在我的列表中我只有两个性别类别,所以我可以使用上面的 where 进行分组。但我事先不知道我的列表中可能包含哪些国家/地区,那么我应该使用什么来分组?
-
你能澄清一下预期的结果吗?列表列表
List<List<Person>>?单独列出List<Person>?还是别的什么? -
@SergeyBerezovskiy 任何一个都可以。
标签: c# list linq group-by distinct