一、排序
1.1 升序排序
使用OrderBy方法。以下代码,将原数组,按照每个单词的长度进行升序排序。
string[] words = { "the", "quick", "brown", "fox", "jumps" };
var list1 = words.OrderBy(x => x.Length);
foreach (var word in list1)
{
Console.WriteLine(word);
}
//结果:
//the
//fox
//quick
//brown
//jumps
1.2 降序排序
使用OrderByDescending方法。以下代码,将原数组,按照每个单词的首字母进行降序排序。
string[] words = { "the", "quick", "brown", "fox", "jumps" };
var list2 = words.OrderByDescending(x => x.Substring(0, 1));
foreach (var word in list2)
{
Console.WriteLine(word);
}
//结果:
//the
//quick
//jumps
//fox
//brown
1.3 双重排序
先根据一定规则排序,在此基础上,再根据另一个规则进行排序。使用OrderBy和ThenBy方法。以下代码,先将原数组按单词长度排序,在此基础上,再按首字母进行排序。
string[] words = { "the", "quick", "brown", "fox", "jumps" };
var list3 = words.OrderBy(x => x.Length).ThenBy(x => x.Substring(0, 1));
foreach (var word in list3)
{
Console.WriteLine(word);
}
//结果:
//fox
//the
//brown
//jumps
//quick
1.4 反序排序
使用Reverse方法。以下代码,将原数组所有单词反序。
string[] words = { "the", "quick", "brown", "fox", "jumps" };
var list4 = words.Reverse();
foreach (var word in list4)
{
Console.WriteLine(word);
}
//结果:
//jumps
//fox
//brown
//quick
//the
二、集合
2.1 唯一元素
求出集合中的唯一元素,重复元素删除,使用Distinct方法。
int[] numbers = { 1, 1, 2, 2, 3, 3, 3, 4, 6, 6 };
var list1 = numbers.Distinct();
foreach (var number in list1)
{
Console.WriteLine(number);
}
//结果:
//1
//2
//3
//4
//6
2.2 差集
求出集合1中不包含集合2的元素,使用Except方法。
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 4, 5, 6, 7, 8 };
var list2 = numbers1.Except(numbers2);
foreach (var number in list2)
{
Console.WriteLine(number);
}
//结果:
//1
//2
//3
2.3 交集
求出两个集合中相同的元素,使用Interset方法。
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 4, 5, 6, 7, 8 };
var list3 = numbers1.Intersect(numbers2);
foreach (var number in list3)
{
Console.WriteLine(number);
}
//结果:
//4
//5
2.4 并集
合并两个集合,剔除重复的元素,使用Union方法。
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 4, 5, 6, 7, 8 };
var list4 = numbers1.Union(numbers2);
foreach (var number in list4)
{
Console.WriteLine(number);
}
//结果:
//1
//2
//3
//4
//5
//6
//7
//8
2.5 连接
单纯合并两个集合,不进行额外操作,使用Concat方法。
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 4, 5, 6, 7, 8 };
var list5 = numbers1.Concat(numbers2);
foreach (var number in list5)
{
Console.WriteLine(number);
}
//结果:
//1
//2
//3
//4
//5
//4
//5
//6
//7
//8
2.6 按元素属性操作
上述方法,都是对集合中的元素本身进行操作的。有时候需要按照元素内的属性进行操作。例如,一个班级里的人,都有学号、姓名、性别等属性,我们需要找出班里不重名的人的数量,则需要使用此方法。
对于上述集合操作,在后面加上By后缀即可。以Distinct为例,使用DistinctBy方法:
Person[] people = new Person[] {
new Person(){ Id=1,Name="Tom",Sex="M"},
new Person(){ Id=2,Name="Tom",Sex="M"},
new Person(){ Id=3,Name="Marry",Sex="F"}
};
var list6 = people.DistinctBy(p => p.Name);
foreach (var person in list6)
{
Console.WriteLine(person.Name);
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
}
//结果:
//Tom
//Marry
三、筛选
根据一定条件,对数据进行筛选,使用Where方法。以下代码,取出数组中大于3的元素。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
var list = numbers.Where(x => x > 3);
foreach (var number in list)
{
Console.WriteLine(number);
}
//结果:
//4
//5
//6
四、量化
量化操作都是返回一个布尔值。
4.1 全满足
是否所有元素都满足一定条件,使用All方法。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
bool val = numbers.All(x => x > 3);
Console.WriteLine(val);
//False
4.2 存在满足
是否存在一个元素满足条件,使用Any方法。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
bool val = numbers.Any(x => x > 3);
Console.WriteLine(val);
//True
4.3 包含元素
是否包含某一元素,使用Contains方法。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
bool val = numbers.Contains(3);
Console.WriteLine(val);
//True
五、分区
5.1 跳过
跳过指定数量的元素,使用Skip方法。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
var list = numbers.Skip(3);
foreach (var number in list)
{
Console.WriteLine(number);
}
//结果
//4
//5
//6
5.2 跳过条件
跳过满足条件的元素,从第一个不满足条件的元素开始取,使用SkipWhile方法。以下代码,条件是小于3的元素,1,2都满足,从3开始不满足,所以从3开始取数。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
var list = numbers.SkipWhile(x => x < 3);
foreach (var number in list)
{
Console.WriteLine(number);
}
//结果
//3
//4
//5
//6
5.3 取数
从开始取指定数量的元素,使用Take方法。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
var list = numbers.Take(3);
foreach (var number in list)
{
Console.WriteLine(number);
}
//结果
//1
//2
//3
5.4 取数条件
按照条件取数,直到条件不满足,使用TakeWhile方法。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
var list = numbers.TakeWhile(x => x < 3);
foreach (var number in list)
{
Console.WriteLine(number);
}
//结果
//1
//2
5.5 分块
指定每一块的元素数量,对原数组进行分块,使用Chunk方法。
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
var chunks = numbers.Chunk(3);
foreach (var chunk in chunks)
{
Console.WriteLine("Chunk:");
foreach (var number in chunk)
{
Console.WriteLine(number);
}
}
//结果
//Chunk:
//1
//2
//3
//Chunk:
//4
//5
//6
//Chunk:
//7
//8
六、分组
根据一定条件对数据进行分组,使用Group方法。
string[] words = new string[] { "A1", "B1", "A2", "C2", "B3","A3" };
var groups = words.GroupBy(x => x.Substring(0, 1));
foreach(var group in groups)
{
Console.WriteLine("Group:");
foreach(var word in group)
{
Console.WriteLine(word);
}
}
//结果:
//Group:
//A1
//A2
//A3
//Group:
//B1
//B3
//Group:
//C2