C#中的对一维数组或者列表进行切片

一、前言

擅长数据分析的语言,他们的数组或者列表有一个切片的功能,用着十分好用
大概的服用方式如下:

//假代码
var ary = [0,1,2,3,4,5]
ary[0,1]    //[1,2]
ary[3,end]  //[3,4,5]

本文知识点:
【1】Linq 之 Skip() Take()
【2】扩展方法


二、C#中要实现的目标

假定你有一个array,你可以直接调用Slice(startIdx,endIdx)进行切片
在这里插入图片描述
请问这个Slice要
如何实现?

三、Linq中Skip和Take的用法

myList.Skip(idx) //下标为idx之前的所有item都会被忽略,然后取剩余的item元素
例如:myList.Skip(2) //取myList中下标从2到结束的所有item

myList.Take(count) //在myList中取count个元素,从start位置开始取

myList.Skip(0).Take(3) //取3个item,从index为0的位置开始取

四、Slice(startIndex,endIndex)的实现

startIdx:开始的下标
endIdx :结束的下标
myList.Skip(startIdx).Take(endIdx - startIdx + 1) //在myList中切片,取从startIdx取到endIdx

五、如何实现【myList.Slice(,)】–扩展方法

/// <summary>
/// 扩展方法:对一个list进行切片,指定【开始下标】和【结束下标】,然后返回这些系列组成的列表
/// </summary>
/// <typeparam name="T">list中item的类型</typeparam>
/// <param name="myList">要切片的列表</param>
/// <param name="startIdx">起始的下标</param>
/// <param name="endIdx">结束的下标</param>
/// <returns>返回符合条件的item组成的列表</returns>
public static List<T> Slice<T>(this List<T> myList, int startIdx, int endIdx)
{
    return myList.Skip(startIdx).Take(endIdx - startIdx + 1).ToList();
}  

六、测试

int[] aryInt = new int[5] { 0, 1, 2, 3, 4 };
Debug.Log("==========Slice(1, 2)==========");
aryInt.ToList().Slice(1, 2).ForEach(x=> Debug.Log(x));
Debug.Log("==========Slice(0, 4)==========");
aryInt.ToList().Slice(0, 4).ForEach(x => Debug.Log(x));
Debug.Log("==========Slice(-5, 5)==========");
aryInt.ToList().Slice(-1, 5).ForEach(x => Debug.Log(x));

测试结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值