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