当前位置:  开发笔记 > 编程语言 > 正文

C#列表推导简介

如何解决《C#列表推导简介》经验,为你挑选了3个好方法。

如何在C#中执行列表推导?



1> λ Jonas Gora..:

List Comprehension是一种集合表示法,程序员可以在其中描述集合成员必须满足的属性.它通常用于通过将某种类型的组合,转换或缩减功能应用于现有集合来基于其他已存在的集合或集合来创建集合.

请考虑以下问题:您有一个从0到9的10个数字的序列,您需要从该序列中提取所有偶数.在诸如C#1.1版之类的语言中,您几乎只能使用以下代码来解决此问题:

ArrayList evens = new ArrayList();
ArrayList numbers = Range(10);
int size = numbers.Count;
int i = 0;

while (i < size) 
{
    if (i % 2 == 0) 
    {
        evens.Add(i);
    }
    i++;
}

上面的代码没有显示Range函数的实现,该函数在下面的完整代码清单中提供.随着C#3.0和.NET Framework 3.5的出现,基于Linq的List Comprehension符号现在可供C#程序员使用.上面的C#1.1代码可以像这样移植到C#3.0:

IEnumerable numbers = Enumerable.Range(0, 10);
var evens = from num in numbers where num % 2 == 0 select num;

和技术上来说,在C#3.0以上代码可以通过移动呼叫要被写入作为一衬垫Enumarable.Range到生成的LINQ表达式唇上序列.在C#List Comprehension中,我通过将一个函数(模2)应用于该序列来减少集合.这以更简洁的方式产生均衡序列并避免使用循环语法.现在,您可能会问自己:这纯粹是语法糖吗?我不知道,但我会明确地调查,甚至可能在这里问自己的问题.我怀疑这不只是语法糖,并且可以通过利用底层monad进行一些真正的优化.

完整的代码清单可在此处获得.



2> Justin Bozon..:

当我在C#中查找如何进行列表推导时找到了这个...

当有人说列表理解时,我会立即想到Python.下面的代码生成一个如下所示的列表:

[0,2,4,6,8,10,12,14,16,18]

Python的方式是这样的:

list = [2*number for number in range(0,10)]

在C#中:

var list2 = from number in Enumerable.Range(0, 10) select 2*number;

两种方法都被懒惰地评估.


Python构建整个列表,它不是懒惰的评估.在Python中,如果您想要延迟评估,请使用生成器表达式.在语法上,使用括号而不是方括号.

3> Nescio..:

@Ian P.

 return (from user in users
         where user.Valid
         select user.Name).ToArray();

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有