Dotnet的数据定位和匹配
Dotnet里,數(shù)據(jù)定位和匹配的相關(guān)編程現(xiàn)在變得很舒服。
?
最近項目緊,還要不停出差。
所以,寫個短點的、最近經(jīng)常用到的內(nèi)容:數(shù)據(jù)定位和匹配。
?
數(shù)據(jù)定位
假設(shè)我們有這樣一個數(shù)組:
var?array?=?new?int[]?{?1,?2,?3,?4,?5,?6,?7,?8,?9,?0?};我們?nèi)∧硞€位置的值,以前的做法通常是:
int?x?=?array[4]; int?y?=?array[array.Length?-?1];現(xiàn)在,我們有了一個專門用于定位的結(jié)構(gòu)System.Index。注意,這是一個結(jié)構(gòu)。
所以,取特定位置的數(shù)據(jù),可以寫成這樣:
Index?index?=?new?Index(4,?fromEnd:?false); int?x?=?array[index];或者直接合并成:
int?x?=?array[new?Index(4,?false)];?
看一下Index的第二個參數(shù)fromEnd,很明顯,就是這個計數(shù)是從前往后還是從后往前計數(shù)的一個標(biāo)志。所以,從尾計數(shù),可以寫成:
int?y?=?array[new?Index(1,?true)];這兒要稍注意一下,從后往前計數(shù),索引值1是最后一個數(shù)據(jù),索引值0指出去了,會報錯。我們可以把這個數(shù)字想象成array.length-x
里的x。
另外,在fromEnd值為true時,即從后往前計數(shù)時,Index提供了一個簡單的寫法:
Index?index?=?^1;?
額外的知識點:這個Index可以用在很多需要定位的地方。看個例子:
string?s?=?@"Hello?WangPlus"; char?a?=?s[new?Index(4)]; char?b?=?s[^2];?
????為了防止不提供原網(wǎng)址的轉(zhuǎn)載,特在這里加上原文鏈接:https://abc.com
數(shù)據(jù)范圍
有定位,就會有范圍。
還是上面的例子:
var?array?=?new?int[]?{?1,?2,?3,?4,?5,?6,?7,?8,?9,?0?};通常,我們?nèi)∫粋€范圍的數(shù)據(jù),會這么取:
var?x?=?array.Skip(3).Take(2);或者用個循環(huán),我就不寫了。
?
這兒,又有一個神奇的結(jié)構(gòu):System.Range。
Range?r?=?new?Range(3,?5); var?xx?=?array[r];結(jié)果跟上面array.Skip(3).Take(2)是一樣的。
這里,Range(Index start, Index end)里,兩個參數(shù)就是上一節(jié)的Index。另外,開始索引是包含的,結(jié)束索引是不包含的。這兒需要注意一下。
?
這里又有一個簡單的寫法。Range(3,5)可以簡單寫為3..5。所以,代碼可以簡化為:
Range?r?=?3..5; var?xx?=?array[r];省去定義,就變成:
var?xx?=?array[3..5];這個寫法還可以延伸出:
var?xx?=?array[3..];????????//從第3個數(shù)據(jù)到最后 var?xx?=?array[..5];????????//從頭到第4個數(shù)據(jù)(注意后面是不包含) var?xx?=?array[..];????????????//全部 var?xx?=?array[0..^0];????//全部?
同Index一樣,這個Range也可以用在各種需要范圍的地方,例如:
string?s?=?@"Hello?WangPlus"; string?a?=?s[3..5];數(shù)據(jù)匹配
還是拿例子來說。假設(shè)我們有下面的一個類定義:
class?Employee {public?int?Id?{?get;?set;?}public?string?Name?{?get;?set;?}public?int?Age?{?get;?set;?} }使用中,我們生成了一個實例:
var?employee?=?new?Employee()?{?Id?=?1,?Name?=?"John?Doe",?Age?=?0?};然后,我們邏輯中需要一些條件判斷,通常,我們可能這么寫:
if(employee.Age?==?0)?{} if(employee.Name?!=?null)?{}?
現(xiàn)在,我們有了更具有可讀性的寫法。
簡單比較
if(employee.Age?is?0)?{} if(employee.Name?is?null)?{} if(employee.Name?is?not?null)?{}類型檢查并創(chuàng)建實例
if(employee?is?Employee?emp) {emp.Age?=?5; }屬性比較
if?(employee?is?{?Age:?3?})?{} if?(employee?is?{?Age:?30,?Name:?"aaa"?})?{} if?(employee?is?{?Age:?>?25?})?{}自己感覺,屬性比較是寫著最痛快的,終于不用一長串的&&了。
?
這就是今天的內(nèi)容了。有沒有Get到爽點?
喜歡就來個三連,讓更多人因你而受益
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Dotnet的数据定位和匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鹅厂二面,Nginx回忆录
- 下一篇: Win10 Terminal + WSL