• .NET 6.0 —— System.Linq


    https://www.zhihu.com/question/449756804

    System.Linq — 可枚举支持IndexRange参数

    该方法现在接受可枚举项末尾的索引,如下例所示。Enumerable.ElementAt

    Enumerable.Range(1, 10).ElementAt(^2); // returns 9

    添加了一个接受参数的重载。它简化了对可枚举序列的切片:Enumerable.TakeRange

    • source.Take(..3) 代替 source.Take(3)
    • source.Take(3..) 代替 source.Skip(3)
    • source.Take(2..7) 代替 source.Take(7).Skip(2)
    • source.Take(^3..) 代替 source.TakeLast(3)
    • source.Take(..^3) 代替 source.SkipLast(3)
    • source.Take(^7..^3)而不是.source.TakeLast(7).SkipLast(3)

    感谢@dixin

    作者:醉书生
    链接:https://www.zhihu.com/question/449756804/answer/2219422015
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    System.Linq — TryGetNonEnumeratedCount

    TryGetNonEnumeratedCount方法尝试在不强制枚举的情况下获取源可枚举的计数。这种方法在枚举之前预分配缓冲区很有用的情况下很有用,如下例所示。

    List<T> buffer = source.TryGetNonEnumeratedCount(out int count) ? new List<T>(capacity: count) : new List<T>();
    foreach (T item in source)
    {
        buffer.Add(item);
    }

    TryGetNonEnumeratedCount检查实现ICollection/或利用Linq 使用的一些内部优化的源ICollection<T>

    System.Linq — DistinctBy/ UnionBy/ IntersectBy/ExceptBy

    新的变体已添加到集合操作中,允许使用键选择器函数指定相等性,如下面的示例所示。

    Enumerable.Range(1, 20).DistinctBy(x => x % 3); // {1, 2, 3}
    
    var first = new (string Name, int Age)[] { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40) };
    var second = new (string Name, int Age)[] { ("Claire", 30), ("Pat", 30), ("Drew", 33) };
    first.UnionBy(second, person => person.Age); // { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40), ("Drew", 33) }

    System.Linq — MaxBy/MinBy

    MaxByMinBy方法允许使用键选择器查找最大或最小元素,如下例所示。

    var people = new (string Name, int Age)[] { ("Francis", 20), ("Lindsey", 30), ("Ashley", 40) };
    people.MaxBy(person => person.Age); // ("Ashley", 40)

    System.Linq — Chunk

    Chunk 可用于将可枚举的源分块为固定大小的切片,如下例所示。

    IEnumerable<int[]> chunks = Enumerable.Range(0, 10).Chunk(size: 3); // { {0,1,2}, {3,4,5}, {6,7,8}, {9} }

    归功于罗伯特·安德森

    System.Linq的- FirstOrDefault/ LastOrDefault/SingleOrDefault过载采取默认参数

    现有FirstOrDefault/ LastOrDefault/SingleOrDefault方法返回如果源枚举是空的。添加了新的重载,接受在这种情况下要返回的默认参数,如下面的示例所示。default(T)

    Enumerable.Empty<int>().SingleOrDefault(-1); // returns -1

    感谢@ Foxtrek64

    System.Linq —Zip接受三个枚举的重载

    邮编方法现在支持组合三个枚举接口,你可以在下面的例子中看到。

    var xs = Enumerable.Range(1, 10);
    var ys = xs.Select(x => x.ToString());
    var zs = xs.Select(x => x % 2 == 0);
    
    foreach ((int x, string y, bool z) in Enumerable.Zip(xs,ys,zs))
    {
    }

    感谢霍耀元

     



    作者:醉书生
    链接:https://www.zhihu.com/question/449756804/answer/2219422015
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    修改 cmd 控制台字体、巧用 FontLink 使中英文独立设置
    非常棒的 「Sublime Text 配色/主题」与「编程字体」
    如何优雅地制作精排 ePub —— 个人电子书制作规范及基本样式表
    Simofox 2.7
    轻松绕过极域电子教室、和教师控制 Say GoodBye
    linux常用的命令
    Java Map按键(Key)排序和按值(Value)排序
    关于递归的理解以及实例
    如何去掉list里重复的数据
    快速排序的白话理解(拷贝)
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/15785190.html
Copyright © 2020-2023  润新知