震惊小伙伴的单行代码●C#篇

几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红。很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,比如 Haskell, Ruby, Groovy, Clojure, Python, C#, F#, CoffeeScript

每篇文章都令人印象深刻的揭示了这些语言中一些出色优秀的编程特征。编程高手们利用这些技巧提高编程速度、改进软件质量,编程初学者能从这些简洁的预防中学到各种编程语言的真谛。本《震惊小伙伴的单行代码系列》将逐一介绍这些各种编程语言单行代码文章,供大家学习参考。

1、让列表中的每个元素都乘以2

Print("Multiple each item in a list by 2", Enumerable.Range(1, 10).Select(i => i * 2));

2、求列表中的所有元素之和

Print("Sum a list of numbers", Enumerable.Range(1, 1000).Sum());

3、判断一个字符串中是否存在某些词

var wordlist = new[] { "C#", "and stuff" };
var tweet = "This is an example tweet talking about C# and stuff";
Print("Verify if a word exists in string", wordlist.Any(word => tweet.IndexOf(word) > -1));
Print("Show matched words in string", wordlist.Where(word => tweet.IndexOf(word) > -1));

4、读取文件

Print("Read in a File", File.ReadAllBytes("oneliners.exe").Length);

5、祝你生日快乐!

Print("Happy Birthday", Enumerable.Range(1, 4).Select((i) => string.Format("Happy Birthday {0} ", i == 3 ? "dear NAME" : "to You")));

6. 过滤列表中的数值

var passed = new List<int>();
var failed = new List<int>();

(from bucket in new[] { passed, failed } from i in new[] { 49, 58, 76, 82, 88, 90 } select new { bucket, i }).ToList().ForEach((tuple) => tuple.bucket.AddRange(Enumerable.Repeat(tuple, 1).Where((tup) => (tup.bucket == passed && tup.i > 60) || (tup.bucket == failed && tup.i <= 60)).Select((tup) => tup.i)));
Print("Filter list of numbers >60", (IEnumerable<int>)passed);
Print("Filter list of numbers <=60", (IEnumerable<int>)failed);

7. 获取XML web service数据并分析

Print("Fetch and Parse an XML web service", XDocument.Load("http://search.twitter.com/search.atom?&q=scala"));

8. 找到列表中最小或最大的一个数字

Print("Find minimum in a list", Enumerable.Min(new[] { 14, 35, -7, 46, 98 }));
Print("Find maximum in a list", Enumerable.Max(new[] { 14, 35, -7, 46, 98 }));

9. 并行处理

Print("Parallel Processing", Enumerable.Range(1, 10).AsParallel().Select((i)=>i*2).AsEnumerable());

10. “Sieve of Eratosthenes”算法

Print("Sieve of Eratosthenes", Enumerable.Range(1, 9999).Select(num => { return Enumerable.Range(2, num).Count(der => num % der == 0) > 1 ? 1 : num; }).Where(p => p != 1));
分享这篇文章:

3 Responses to 震惊小伙伴的单行代码●C#篇

  1. lizs says:

    震惊个毛线,这是LINQ。

  2. Leeyk says:

    就是Linq,没什么好说。
    C#2.0用匿名泛型委托也可以实现一行代码,只是没Lambda那么好看。

发表评论

电子邮件地址不会被公开。 必填项已用*标注