0
点赞
收藏
分享

微信扫一扫

c#-可枚举类型

千妈小语 2022-02-10 阅读 80
c#

静态了Enumerable提供了一堆IEnumerable接口的扩展方法。
并提供了Linq语句的源方法。

需要自己调用的方法

生成连续数字:Range。第一个参数是起始数。第二个参数是需要生成的数量。

var a = Enumerable.Range(0, 10);
Console.WriteLine(string.Join(",", a));

复制值生成序列:Repeat。第一个参数是被复制的值。第二个参数是生成的数量。
获得指定类型的空序列:Empty。

可映射数据,并返回单个值的方法

平均值(返回值为数字类型):Average。如果本身就是数字类型,则可以不要映射委托。
总和(返回值为数字类型):Sum。如果本身就是数字类型,则可以不要映射委托。
累加器(需要两个参数指示如何相加)Aggregate。在委托之前还可以加一个参数指示自选初始值。
最大值(返回值需要可比较):Max。如果本身就可以比较,可以不填委托。
最小值(返回值需要可比较):Min。如果本身就可以比较,可以不填委托。

全匹配(返回值为bool类型):All。验证序列中是否所有元素都符合条件。
任一匹配(返回值为bool类型)Any:验证序列中是否有满足条件的元素。可以不填写委托,判断序列是否有元素。
计数(返回值为bool)Count。获得序列中满足条件元素的数量。不填委托则获得所有元素的数量。
计数(返回值为bool)LongCount。返回long类型。

第一个满足条件的元素(返回值为bool):First。不填委托则获得第一个元素,如果无法得到会报异常。
第一个元素或默认值(返回值为bool):FirstOrDefault。不填委托则获得第一个元素,如果无法得到则返回默认值。
最后满足条件的元素(返回值为bool):Last。不填委托则获得最后一个元素,如果无法得到会报异常。
最后元素或默认值(返回值为bool):LastOrDefault。不填委托则获得最后一个元素,如果无法得到则返回默认值。

获得唯一元素(返回值为bool):Single。如果有多个满足条件的值会报异常。可以不填委托。
获得唯一元素或默认值(返回值为bool):SingleOrDefault。如果有多个满足条件的值会报异常,只在找不到时返回默认值。

可映射数据,并返回序列的方法

分组:GroupBy。把元素按照委托映射为键,把相同键的元素归类。
可以填入第二个委托,把分组集中的所有元素进行映射。
可以填入第三个委托,把分组集和他的共有键进行映射。

内连接:Join。第一个参数为连接的键。第二个和第三个参数为映射出匹配键的委托。
分组连接:GroupJoin。比内连接多出一个参数,这个委托需要两个参数。
第一个参数是主序列的元素,第二个参数是结果集中包含主序列的分组集。

排序,降序排序:OrderBy,OrderByDescending。要求返回值是可比较的。此方法会返回一个IOrderedEnumerable类型。
IOrderedEnumerable记录了在上一次排序中无法分出顺序的元素组,可以使用独有的方法进行后续排序。
但是那个方法太复杂了,不如在一开始就映射成元组一次排好序。

映射:Select。把每个元素映射后组成新的序列。委托可使用两个参数:第二个参数为元素的索引值。
映射组合:SelectMany。尝试把映射后的结果转为IEnumerable类型。直到不能转换。然后把所有元素组合成序列。
例如,在SelectMany中映射出int[][]类型,最终也会得到int序列。因为int[]可转为IEnumerable类型
SelectMany可以追加一个委托,把结果集继续映射。并且委托可以利用结果集中的索引作为参数。

获得部分序列(返回值需要为bool):SkipWhile。获得从第一个不满足条件的元素开始,到序列结尾。
获得部分序列(返回值需要为bool):TakeWhile。获得元素,直到条件不满足。
筛选(返回值需要为bool):Where。获得所有符合条件的元素。

操作序列元素的方法

转化序列泛型参数:AsEnumerable。这个方法会生成一个类型参数为自己父类的序列。不会改变元素。
转化元素类型:Cast。这个方法会尝试把序列中的元素进行类型转化。

追加元素:Append。添加一个元素到序列末尾。
前置元素:Prepend。添加一个元素到开头。

连接序列:Concat。把一个类型参数和自己一样的序列添加到自己末尾。
查找元素:Contains。查找序列中是否有指定元素。
反转序列:Reverse。

获得索引处的元素:ElementAt。
获得索引处的元素或默认值:ElementAtOrDefault。这个方法在索引越界时返回默认值而不会报异常。

最值:MaxBy,MinBy。比较映射后的数据大小,获得对应的源元素。

比对:SequenceEqual。对序列中的所有元素进行判断是否相等。最终得出整个序列是否相等。

返回序列的方法

获取或用默认值代替:DefaultIfEmpty。如果序列有值则返回序列。否则添加一个默认值然后获得序列。可以用参数指定默认值。
压缩:Zip。以元组方式合并两个序列。

去重:Distinct。返回序列中的非重复值。
获得两个序列的差集:Except。
获得两个序列的交集:Intersect。
获得两个序列的并集:Union。

筛选类型:OfType。返回匹配类型的元素组成的序列。

获得部分:Skip获得除去开头部分数量的元素的序列。Take获得开头开始数一定数量的序列。
SkipLast获得除去结尾部分数量的元素的序列。TakeLast获得结尾一定数量的元素序列。

转化其他储存类的方法

数组:ToArray。
集合:ToList。
字典:ToDictionary。需要一个提取键的委托
键集合:ToLookup。需要一个提取键的委托

举报

相关推荐

0 条评论