首页 > 编程语言 >【C#】【System.Linq】一些便捷的数据处理方法(Range、Select)

【C#】【System.Linq】一些便捷的数据处理方法(Range、Select)

时间:2023-10-10 20:35:01浏览次数:53  
标签:Index 下标 10 C# System Linq item Range Num

因为用习惯了Python中一些便捷的方法,随即查询C#中有没有类似的。

 一、Range()方法

在Python中,range(Start,End,Step)可以直接生成一个可迭代对象,便用于需要循环多次处理某些代码块:

(注:Range方法中的End是开区间,range(1,10)实际的取值是(1 ~ 9))

1 for item in range(1, 10):
2     print(item, end='')
3 # Output:
4 # 123456789

 

在C#中也有相同的方法可以使用:

System.Linq 命名空间中的 Enumerable.Range(Start, Count)

1 foreach(int item in Enumerable.Range(1, 10))
2     Console.Write($"{item}=");
3 // Output:
4 // 1=2=3=4=5=6=7=8=9=10=

 

range(Start,End,Step)和Enumerable.Range(Start, Count)中的参数含义有别:

range   依次是 开始,结束,步长,且生成的对象并不包括End这个元素。

Range  依次是 开始,数量,即从1开始,向后数10个数,所以上述输出的结果是1~10,如果改成Range(0, 10)则结果将是0~9。

 

二、Select()方法

其对应着Python中的Enumerate()方法,即遍历元素的同时,并将对应的下标也赋值给index:

 1 for index, item in enumerate(range(1, 10)):
 2     print(f'元素 | {item} | 的下标是:{index}')
 3 # Output:
 4 '''
 5 元素 | 1 | 的下标是:0
 6 元素 | 2 | 的下标是:1
 7 元素 | 3 | 的下标是:2
 8 元素 | 4 | 的下标是:3
 9 元素 | 5 | 的下标是:4
10 元素 | 6 | 的下标是:5
11 元素 | 7 | 的下标是:6
12 元素 | 8 | 的下标是:7
13 元素 | 9 | 的下标是:8
14 '''

 

C#中Select()方法来实现,Select方法可以对集合进行转换,并返回一个包含转换后元素的新集合。

 1 foreach (var item in Enumerable.Range(1, 10).Select((num, index) => new { Index = index, Num = num }))
 2             Console.WriteLine($"Index: {item.Index}, Num: {item.Num}");
 3 
 4 // Output:
 5 //Index: 0, Num: 1
 6 //Index: 1, Num: 2
 7 //Index: 2, Num: 3
 8 //Index: 3, Num: 4
 9 //Index: 4, Num: 5
10 //Index: 5, Num: 6
11 //Index: 6, Num: 7
12 //Index: 7, Num: 8
13 //Index: 8, Num: 9
14 //Index: 9, Num: 10

 

Select()方法中的参数含义依次为,元素,下标,如果写成Select(index, num)那么index将表示元素,num将表示下标。

标签:Index,下标,10,C#,System,Linq,item,Range,Num
From: https://www.cnblogs.com/vangoghpeng/p/17755571.html

相关文章

  • vue中的nextTick函数
    今天实现切换歌曲时发现问题,切换歌曲的逻辑就是更改列表索引获取当前播放歌曲,然后播放歌曲。结果更改歌曲成功了,但是无法切换完播放。后来发现问题,歌曲加载需要时间,播放的指令运行时歌曲还未加载好,所以就出现了无法正常播放的问题。vue中的nextTick函数:在下次DOM更新循环结束之......
  • electron+vue3+electron-updater 实现程序更新
    electron+vue3+edge调用C#.dll文件electron-edge-js用这玩意儿我血压高.....血压高的谨慎食用…文章目录electron+vue3+electron-edge-js调用C#.dll文件起步一、创建Vue3项目(ele)二、Vue3项目中添加electron模块1.添加electron-edge-js模块......
  • ACS系列(4) ACSPL+ 运动控制编程
    轴电机运动管理命令ENABLE&DISABLE   Enable命令激活一个或多个电机和轴   Disable命令关闭一个或多个电机轴。错误码存储在MERR中,可以用FCLEAR来清除只要是电机是使能的,控制器器提供下面工作:1)保持ENA电机在激活状态2)计算PE(非关键性的位置错误)3)执行闭环控制(对于伺服......
  • c++对象模型学习笔记
    参照大佬的博客学习了一下c++的对象模型:https://www.cnblogs.com/skynet/p/3343726.html有些思考需要做下记录。对于有虚函数表的类的对象,它的起始地址处会存储vptr指向虚函数表,在这个虚函数表的前4或8字节中,会存储一个地址值,指向RTTI类型信息对于没有虚函数表的类的对象,也就......
  • lua中调用C#的重载方法
    localm1=typeof(CS.TestClass):GetMethod("Test")--获取c#中的重载函数localf1=xlua.tofunction(m1)--将重载函数转换为lua函数f1(self);lua是没有base的,也就是说想使用C#的base.Test(),直接调用子类的self:Test()是调用子类重写的方法,这个时候如果想调用父......
  • CF 1877 C
    C.Joyboard这道题需要进行分类讨论。当\(k=1\)时,即构造的数组中所有元素皆为\(0\)才成立,所以输出\(1\)。当\(k=2\)时,只有\(a[n+1]<=n\)或\(a[n+1]=x\)(其中\(n|x\))才成立,所以答案是\(n+\lfloor\frac{n+m}{n}\rfloor\)\((m>n)\)。当\(k=3\)时,只有\(a[n+1]>n\)且\(a[n+......
  • MRTG监控linux服务器性能(网络流量,CPU,磁盘等)
     yum-yinstallmrtg* ......
  • Educational Codeforces Round 156 A-D
    A.SumofThree思路1:1.把数拆成1,2,n-32.如果(n-3)%3==0,那么拆成1,4,n-5,可证明n-3如果可被3整除,那么再左移两位一定除不尽思路2:1.如果n是奇数,那么可取一个数为2,其他两数为相邻数,如果两数其中一位被整除,那么两者往外走2.如果n为偶,那么可取一个数为1,同理上点击查看代码#inclu......
  • 执行wordcount报错及解决
    今天在执行wordcount词频统计时报错执行语句为hadoopjarshare/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jarwordcountwcinputwcoutput报错如下 这表示指定的输入路径hdfs://hadoop102:8020/user/atguigu/wcinput不存在然后我打开hadoop可视化网页一看确实......
  • Vue源码学习(十):关于dep和watcher使用的一些思考
    好家伙, 前面想了好久,都没想明白为什么要dep和watcher打配合才能实现数据-视图同步为什么要多一个依赖管理这样的东西给每个数据绑个watcher(xxfunction),然后,数据变了,调set,然后调xxfunction,不就行了,然后今天突然想明白了,不是为什么要这么干,而是必须这么干 来看......