前言
在对MoreLinq库梳理的过程中学习到的一些知识点的整理。
morelinq是对Linq to object的有力补充,国外有本书《Thinking in LINQ》专门花了一章的篇幅介绍了它,它的开发者也是《C# in Depth》作者。
1. 获取26个字母表
//获取26个字母表
void GetAlphabets()
{
var alphabets = Enumerable.Range(0, 26).Select(i => (char)('a' + i));
//alphabets.Dump();
//在Javascript中可使用如下方法
//Array(26).fill (0).map((p,i)=> String.fromCharCode('a'.charCodeAt(0)+i))
//const 和 readonly 的区别,readonly允许在构造器中改变它的状态(初始化),而const不行
}
首先遍历一个0-25的数字集合,然后用'a'+i
得到字母的charCode, 'a' = 97, 注意代码中字符与整形相加时有个隐式转换,实际为(int)'a'+i
。
2. 返回函数的函数
//返回函数的函数
void ReturnFuncOfFunc()
{
DelegateType affine1 = MakeAffine(1, 2);
DelegateType affine2 = MA(1, 3);
affine1(5).Dump();//1*5+2==7
affine2(5).Dump();//1*5+3==8
}
//返回函数的函数的定义
delegate int DelegateType(int x);
static DelegateType MakeAffine(int a, int b)
{
return delegate (int x)
{
return a * x + b;
};
}
//返回函数的函数的定义 语法糖形式
static DelegateType MA(int a, int b) => (int x) => a * x + b;
如果需要个根据不同输入返回不同函数的函数,则需要先定义一个这样一个委托类型,以便定义函数返回这个类型,注意返回函数的函数的定义语法糖形式确实很简洁,很实用。
3. 不可变集合ImmutableList
//ImmutableList 不可变集合 , 与string类似, string也属于Immutable,但是有些许区别
void ImmutableListFunc()
{
ImmutableList<string> emptyBusket = ImmutableList.Create<string>();
var fruitBasket = emptyBusket.Add("apple");
//每次修改都会创建一个新的集合
//这就意味着要开辟新的内存,并且存在数据拷贝。程序本身的执行效率会下降同时GC压力会增大。
emptyBusket.Dump();//empty
fruitBasket.Dump();//["apple"]
ReferenceEquals(emptyBusket,fruitBasket).Dump();//false
}
ImmutableList 不可变集合 , 与string类似, string也属于Immutable,但是有些许区别。不可变集合最好理解的形式就是值类型,值类型都是不可变类型,对值类型变量的修改都会产生一个新的变量。
4. 两个可遍历对象各自对应值的操作 - zip
//两个可遍历对象各自对应值操作
void ZipLambda()
{
var i = Enumerable.Range(0, 26);
var a = Enumerable.Range(0, 26).Select(a => (char)('a' + a));
var zip = i.Zip(a, (us, them) => (Us: us, Them: them));
string.Join("\t", zip.Select(z => z.Us + ":" + z.Them)).Dump("Zip");
//0:a 1:b 2:c 3:d 4:e 5:f 6:g 7:h 8:i 9:j 10:k 11:l 12:m 13:n 14:o 15:p 16:q 17:r 18:s 19:t 20:u 21:v 22:w 23:x 24:y 25:z
}
Zip是linq中提供的遍历两个可遍历对象的数据,并顺序将两个对应的值使用Action委托操作。注意如果,如果两个可遍历对象的数量不同,则取较短的那个。
系列文章,敬请期待后续。
本文作者:wwmin
微信公众号: DotNet技术说
本文链接:https://www.jianshu.com/p/1765bfee99bf
关于博主:评论和私信会在第一时间回复。或者[直接私信]我。
版权声明:转载请注明出处!
声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!
网友评论