C#8中的Range和Index(范圍和索引)

來(lái)源:https://note.guoqianfan.com/2021/07/13/Range-and-Index-in-csharp

Range-范圍

范圍運(yùn)算符

  • 范圍運(yùn)算符:..琐凭,它會(huì)生成一個(gè)Range對(duì)象傅物。

  • 語(yǔ)法:{startIndex}..{endIndex}:包含startIndex猎唁,不包含endIndex

  • 限制:0 <= startIndex <= endIndex <= arr.Length,其他均會(huì)報(bào)錯(cuò)洒扎!

    startIndex等于endIndex時(shí),取不出元素碎浇,會(huì)生成一個(gè)空數(shù)組腾它。

注意

  • 默認(rèn)情況下,..的前面是0碗誉,后面是 arr.Length(不含)召嘶。..等價(jià)于0..arr.Length
  • 所以..的前面和后面均可以為空哮缺。
  • 所以..也可以單獨(dú)使用苍蔬,代表整個(gè)索引范圍(0..arr.Length):arr[..]arr的完整拷貝。

深拷貝還是淺拷貝需要看元素是值類型還是引用類型蝴蜓。值類型復(fù)制值碟绑,可以認(rèn)為是深拷貝引用類型復(fù)制引用茎匠,就是淺拷貝格仲。

Range

Range用來(lái)從集合中取出 指定索引范圍 的元素來(lái)生成新的集合

創(chuàng)建RangeRange range = 2..4;

var arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Range range = 2..4;
int[] slice = arr[range]; // 或 arr[2..4];
foreach (var number in slice)
{// [3, 4]
    Console.WriteLine(number);
}

arr[2..4]表示把arr這個(gè)序列诵冒,從索引為2的元素一直到索引為4(不含4)的元素提取出來(lái)組成新的序列凯肋。所以結(jié)果就是3,4汽馋。

Index-索引

Index用來(lái)指定索引侮东。該索引可以用來(lái)從集合中取出指定索引處的元素圈盔,是單個(gè)元素

乍一看悄雅,Indexint類型的索引沒啥區(qū)別驱敲。嗯。宽闲。確實(shí)是這樣众眨,因?yàn)?code>Index要與^操作符結(jié)合起來(lái)才能發(fā)揮更大的作用。對(duì)了容诬,還有Range娩梨。。

末尾運(yùn)算符

^是末尾運(yùn)算符(Hat運(yùn)算符)览徒,它會(huì)生成一個(gè)Index對(duì)象狈定,用來(lái)從末尾開始往前取數(shù)據(jù)。

正向取數(shù)據(jù)時(shí)索引從0開始不同习蓬,^取數(shù)據(jù)時(shí)是從1開始的掸冤,代表倒數(shù)第一個(gè)元素

  • arr[^1]等于arr[arr.Length-1]友雳,最后一個(gè)元素
  • arr[^0]等于arr[arr.Length]稿湿,常與Range組合使用

如果使用arr[^0]的話就會(huì)拋出IndexOutOfRangeExceptionarr[^0]arr[arr.Length]是一個(gè)意思押赊。

這確實(shí)有點(diǎn)容易讓人混淆饺藤,但其實(shí)其它語(yǔ)言也差不多是這樣設(shè)計(jì)的,例如-1這個(gè)索引表示最后一個(gè)元素流礁。

組合使用 Range 和 Index

完整拷貝數(shù)組的3種方式

int[] arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] arr01 = arr[0..arr.Length];
int[] arr02 = arr[0..^0];
int[] arr03 = arr[..];

注意

  • Range的范圍包含Start涕俗,不包含End。
  • 所以索引為0的元素包含神帅,索引為10或者^0的元素不包含(盡管也不存在)再姑。

更多例子

int[] arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] arr01 = arr[..]; //完整的復(fù)制,數(shù)組
int[] allButFirst = arr[1..]; //不包含第一個(gè)元素的數(shù)組
int[] empty = arr[^0..]; //空數(shù)組
int[] onlyLastItem = arr[^1..]; //只包含最后一個(gè)元素的數(shù)組
int[] last4Items = arr[^4..]; //只包含最后四個(gè)元素的數(shù)組
int lastItem = arr[^1]; //最后一個(gè)元素

單獨(dú)使用Range或Index

int[] arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Index middle = 4;
Index threeFromEnd = ^3;
Range range = middle..threeFromEnd;
int[] mySlice = arr[range]; //5, 6, 7

參考

  1. C# 8 - Range 和 Index(范圍和索引):https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654076610&idx=1&sn=8e04e2da923f44d04c642a0e0aabd7aa找御,好文元镀,強(qiáng)烈推薦!霎桅!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栖疑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滔驶,更是在濱河造成了極大的恐慌遇革,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萝快,居然都是意外死亡锻霎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門揪漩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)旋恼,“玉大人,你說(shuō)我怎么就攤上這事氢拥。” “怎么了锨侯?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵嫩海,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我囚痴,道長(zhǎng)叁怪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任深滚,我火速辦了婚禮奕谭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痴荐。我一直安慰自己血柳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布生兆。 她就那樣靜靜地躺著难捌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸦难。 梳的紋絲不亂的頭發(fā)上根吁,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音合蔽,去河邊找鬼击敌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拴事,可吹牛的內(nèi)容都是我干的沃斤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼刃宵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼轰枝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起组去,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鞍陨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诚撵,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缭裆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寿烟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈驼。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筛武,靈堂內(nèi)的尸體忽然破棺而出缝其,到底是詐尸還是另有隱情,我是刑警寧澤徘六,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布内边,位于F島的核電站,受9級(jí)特大地震影響待锈,放射性物質(zhì)發(fā)生泄漏漠其。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一竿音、第九天 我趴在偏房一處隱蔽的房頂上張望和屎。 院中可真熱鬧,春花似錦春瞬、人聲如沸柴信。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颠印。三九已至,卻和暖如春抹竹,著一層夾襖步出監(jiān)牢的瞬間线罕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工窃判, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钞楼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓袄琳,卻偏偏與公主長(zhǎng)得像询件,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唆樊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容