×

Loading...

@Vancouver

Topic

  • 工作学习 / 学科技术 / .net 6 新增的一些有趣的Linq +3

    比如我有如下collections

    string[] names = new[] {"tom0", "tom1", "tom2", "tom3", "tom4", "tom5", "tom6"};
    int[] items = new[] {0,1,2,3,4,5,6};

    我要取倒数第二个items的值(5),.net 6可以用^符号表示反转,区别如下:

    items.Reverse().ElementAt(1).Dump(); // old style
    items.ElementAt(^2).Dump(); // .net 6

    我要取items第2到第5区间的sub collections,可以用 x..y 语法

    items.Skip(2).Take(3).Dump(); // old style
    items.Take(2..5).Dump(); // .net 6

    把items和names结合起来,生成一个新的Tuple<int, string> collection

    items.Zip(names).Dump(); // .net 6

    • Thanks for sharing.
      does this method still honor the boudary
    • 我成天被人教育微软的东西烂,看来不止我一个在用啊。真高兴 +1
      • 微软的很多东西其实超好用,比如 .net core ---- 但微软长时期缺乏一个杀伐决断的技术灵魂人物,总是骑墙,既不全力开放也没能象苹果全力封闭,走了条中间不尴不尬的路线,扼杀了自己的太多机会。 +1
        • 微软的东西就是这样,一旦有点红红火火的苗头,就开始胡思乱想了……
    • 这些东西别的语言早就有了,而且Zip就是抄Ruby的 +1
      $ irb
      2.6.6 :001 > names = ["tom0", "tom1", "tom2", "tom3", "tom6"]
       => ["tom0", "tom1", "tom2", "tom3", "tom6"]
      2.6.6 :002 > names[-2]
       => "tom3"
      2.6.6 :003 > names[2..5]
       => ["tom2", "tom3", "tom6"]
      2.6.6 :004 > items = [0,1,2,3,4,5,6]
       => [0, 1, 2, 3, 4, 5, 6]
      2.6.6 :005 > items.zip(names)
       => 0, "tom0"], [1, "tom1"], [2, "tom2"], [3, "tom3"], [4, "tom6"], [5, Nil], [6, Nil
      2.6.6 :006 >
      
      
      • 还真不太一样 --- 严格来说在 .net 里,因为 linq 是基于 extension method,所以 zip 这样的 method 你自己很多年前就可以拥有。
        • MS really should add extension .ForEach() to IEnumerable<T>, I always have to create this extension method manually
        • 这东西早就有了。你现在是在MS系统打转所以有这种说法。个人观点。net能挺很长时间,但最后可能结果跟VB一样
          • 我在跳到了完全不用 MS 系统的公司后,才对 MS 的好用有了更深的认识。
    • 现在还困在.net里,怎么搞移动端?
      • 哥业余写游戏的,必须用c#啊,不过话说回来,unity那点c#的难度,比起企业里的 .net应用,不知道简单了多少倍