您好,登錄后才能下訂單哦!
之前在Ruby中演示了一段代碼來講述Ruby的神奇,下面我們再來看一下:
sum = 0 i = 0 (1..101).each do|elem| sum+=i i+=1end puts sum
是的就是這段代碼,求1到100的和,代碼的優美和簡潔讓我驚嘆。
如果你是有兩年工作經驗以上的人,當在面試時,面試官給你出這樣一道題:請編碼求出1到100的和,用兩種或兩種以上或者更簡潔的方法來實現。你是否很快就寫出來了呢?我們來看看。
var sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } Console.WriteLine(sum);
一氣呵成,這可難不倒有過兩年工作經驗以上的人,牛逼哄哄的。馬不停蹄,走你,進行第二種方式。
static int Sum() { var sum = 0; var i = 1; do { sum += i; i++; } while (i <= 100); return sum; }
哦,果然速度,既然都有do while了 ,不是說要兩種或兩種以上的方式嗎,繼續來一個。
static int Sum() { var sum = 0; var i = 1; while (i <= 100) { sum += i; i++; } return sum; }
好,到此就算完事了,輕輕松松就ok了,面試官一看,繼續問你,除了這些還有其他方式嗎,你果斷說沒有,此時面試官說基本上算滿意,不好意思,只能給你個及格,你是不是正在納悶呢?什么情況,你說的兩種或兩種以上的方法我都已經實現了而且是最簡潔的方式啊,而且結果都是對的,會不會覺得面試官是在跟你抬杠呢?。
如果是在此之前我也會這樣寫,我一直堅信這是在C#中實現1到100的和的唯一方式(當然也可以用do while和while之類的,其實都差不多),此時我們需要想想,面試官的意圖是什么,就是為了考你這個,好歹也是工作兩年以上的人了,這簡直是看不起人嘛,是的確實有點看不起人,作為工作經驗比較足的人,你考我這個,沒錯,正是因為工作經驗足才考你這個,但是你卻沒能體現你的能力。好了,點到為止,我們開始步入正題,此時你有沒有發現代碼還是有點繁瑣,C#簡潔的語法跑到哪里去了,讓我開始對我最鐘情的C#有點不堅定了。
這個就是我們久久未引入的話題,利用它我們完全可以寫出如Ruby一樣優美的代碼,我們來看看是如何求出1到100的和的:
var list = Enumerable.Range(1, 100); var result = list.Aggregate((a, b) => (a + b)); Console.WriteLine(string.Format("1到100的和為{0}", result));
就是這么easy,讓我眼前一亮,對C#又充滿了信心,正如上述而言,作為有工作經驗的人,可能這個方法確實沒有怎么用過,用的大多數是常見的Linq,當然了那么多Linq哪能全部都會用啊,但是,但是至少得了解這個Linq是做什么的吧(別往心里去,說的沒見識的我)。
該Linq字面意思為聚合,例如可用來對集合進行篩選以及上述的求和等等,它有三個重載,它是對列表上的每個元素執行操作,也就是說對第一個和第二個上的元素執行操作,將執行的結果繼續攜帶進行操作。其中有一個重載是種子重載。
我們求1到5的階乘。
var nums = Enumerable.Range(2, 4); var sum = nums.Aggregate(1, (a, b) => a * b); Console.WriteLine(sum);
所謂種子,也就是先從種子開始作為第一個元素執行操作,整個過程為((((1*2)*3)*4)*5)。
本來沒怎么接觸過Aggregate,在項目中看到別人寫到這么一段代碼才讓我下意識的知道對這個Linq完全沒接觸過,于是就有這一部分內容。在項目中有這樣一個場景:打開對話框上傳文件,可以對該文件進行命名,但是我們知道文件名是無法以某些特殊字符命名的如<或者|等等,當文件名為這些時,上傳到后臺我們會進行替換處理用“-”來進行替換。我們看看代碼,例如:
var invalidFileName = Path.GetInvalidFileNameChars(); var replaceResult = invalidFileName.Aggregate("study<Aggregate>first", (accmulate, result) => (accmulate.Replace(result, '-'))); Console.WriteLine(replaceResult);
結果如下:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。