LINQ操作汇总

一、排序

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 双重排序

先根据一定规则排序,在此基础上,再根据另一个规则进行排序。使用OrderByThenBy方法。以下代码,先将原数组按单词长度排序,在此基础上,再按首字母进行排序。

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值