龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

.NET中LINQ编程简化代码实现数组、遍历、转换等功能

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
如何使用LINQ来实现如下功能: ◆初始化数组 ◆在一个循环中遍历多个数组 ◆生成随机序列 ◆生成字符串 ◆转换序列或集合 ◆把值转换为长度为1的序列 ◆遍历序列的所有子集 如果你

如何使用LINQ来实现如下功能:

◆初始化数组

◆在一个循环中遍历多个数组

◆生成随机序列

◆生成字符串

◆转换序列或集合

◆把值转换为长度为1的序列

◆遍历序列的所有子集

如果你在LINQ方面有心得也欢迎在评论中一起分享。

1. 初始化数组

通常,我们需要把数组的值初始化为相同的值或递增的序列值,或者可能是一个步进不为1的递增/递减序列。有了LINQ,我们可以在数组的初始化器中完成所有工作,不再需要循环

在如下的示例代码中,第一行代码初始化了一个长度为10的数组,所有元素都是-1,第二行代码初始化b为0、1、2到9,第三行代码初始化c为100、110、120到190。

以下为引用的内容:

  int[] a = Enumerable.Repeat(-1, 10).ToArray();

  int[] b = Enumerable.Range(0, 10).ToArray();

  int[] c = Enumerable.Range(0, 10).Select(i => 100 10 * i).ToArray();

要提醒一下:如果你初始化一个很大的数组,最好不考虑这种优雅的方式而是使用传统的方式来替代。LINQ的这种解决方案会动态产生数组,因此垃圾数组需要在运行时被回收。也就是说,我总是会在小数组或测试调试代码的情况下使用这种技巧。

2. 在一个循环中遍历多个数组

有个朋友问我一个C#的问题:有没有办法在一个循环中遍历多个集合?他的代码差不多是这样:

以下为引用的内容:

  foreach (var x in array1) {

  DoSomething(x);

  }

  foreach (var x in array2) {

  DoSomething(x);

  }

这样的话,循环主体会很大,而且他也不希望这样重复的代码。但是,他又不希望创建一个数组来保存array1和array2的所有元素。

LINQ提供了一种优雅的解决方案:Concat操作。我们可以使用单个循环来重写上面的代码,如下:

以下为引用的内容:

  foreach (var x in array1.Concat(array2)) {

  DoSomething(x);

  }

注意,由于LINQ在枚举器级别进行操作,他不会产生新的数组来保存array1和array2的元素。因此,除了优雅之外,这个方案还很高效。


收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接