LINQ来简化编程的7个技巧

2008-08-19 15:12:56.0     浏览:1725     来源:中国IT实验室
关键词:  LINQ     技巧  

6. 把值转换为长度为1的序列

  当我们需要把单个值转化为一个长度为1的序列时,会怎么做?我们可以创建一个长度为1的数组,但是我还是喜欢LINQ的Repeat操作:

  IEnumerableseq = Enumerable.Repeat(myValue, 1);

  7. 遍历序列的所有子集

  有的时候,遍历数组的所有子集很有用。子集和问题、布尔可满足性问题以及背包问题都可以通过遍历某个序列的所有子集来简单解决。

  有了LINQ,我们可以如下声场所有arr数组的子集:

  T[] arr = ...;

  var subsets = from m in Enumerable.Range(0, 1 <<arr.Length)

  select

  from i in Enumerable.Range(0, arr.Length)

  where (m &(1 <<i)) != 0

  select arr[i];

  注意,如果子集的个数超过了int,上面的代码就不能工作。因此,仅当你知道arr的长度不超过30的时候才去使用这个方式。如果arr长度超过30,你应该不会是想去遍历所有的子集,因为可能这会耗费几分钟或更长的时间。

  评论和总结

  希望这些技巧对你有用,这些示例代码都使用C#实现,但是你可以很容易得改变为其它.NET语言。然而,LINQ对于支持扩展方法、lambda表达式和类型推断的语言更方便,比如C#和VB。这里的每一段代码都可行,但是我不能保证什么,请在使用前仔细检查。

[上一页]   [第1页]   [第2页]   [第3页]   [第4页]   [第5页]   [下一页]