2013-08-21 36 views
1

有人可以閱讀我以下行lambda。如何閱讀此lambda表達式

n => n % 2 == 1 

此外,如果我必須寫沒有lambda的同一段代碼,我會如何寫它。這可能會讓我明白。

的代碼另一塊低於

List<int> numbers = new List<int>{11,37,52}; 
List<int> oddNumbers = numbers.where(n => n % 2 == 1).ToList(); 
+0

不知道用什麼語言,但看起來像一個lambda這需要n和返回true,如果它不被2整除 – aaronman

+0

這應該是一個簡單的模操作,它返回奇數 – Marco

+0

@aaronman檢查問題上的標籤。這是C#。看看你的視覺掃描兒子。 – Gusdor

回答

1

此功能

n => n % 2 == 1 

採用一個參數(n)和返回布爾值:

  • 真,如果n是奇數: n%2 == 1(n是奇數的當且僅當它除以2時除以1)
  • 假否則(如果n是偶數)

當重新寫爲普通功能這將是等同於

Boolean IsOdd(int n) { -- <- I've named it "IsOdd" since lambda functions have no explict names while ordinary functions have 
    return n % 2 == 1; 
    } 

你下面

List<int> oddNumbers = numbers.where(n => n % 2 == 1).ToList(); 

我是一個LINQ表達,其選擇代碼從列表中奇數值

+1

挑剔:它返回true,如果'n'是odd *和positive *。 – Henrik

4

大聲讀出表達式將是

n 'goes to' n modulus two equals one 
n  => n %  2 == 1 

從本質上講,您可以將此lambda看作一個函數,當提供給它的值(n)爲奇數和正數時返回true,否則返回false。你也可以這樣寫一個方法

bool IsOddAndPositive(int n) 
{ 
    return n % 2 == 1; 
} 

使用它作爲您的片段將

List<int> numbers = new List<int>{11, 37, 52}; 
List<int> oddNumbers = numbers.Where(IsOddAndPositive).ToList(); 

而結果(均爲您指定什麼和方法的例子)是

11, 37 
0

至於十有二的問題,你會怎麼寫,而不拉姆達:

int[] digits = {1,2,3,4,5,6,7,8,9,10}; 
int[] OddDigits = new int[5]; 

for(int i = 0; i < digits.Length; i++) 
{ 
    if(digits[i] % 2 == 1) 
    { 
     int x = 0; 
    OddDigits[x] = digits[i]; 
     x++; 
    } 
} 

爲了簡單起見,我只是用數組替換了列表。正如我在我的評論之前所述,這是一個簡單的模操作

0

1號線實例3點的整數 %運算符,也稱爲模運算,名單由它的第二

將其第一個操作數後,計算剩餘

第二行的結果將是包含11和37

列表,你可以使用foreach寫這樣的:

 List<int> numbers = new List<int> { 11, 37, 52 }; 
     List<int> oddNumbers = new List<int>(); 
     foreach (var num in numbers) 
     { 
      if (num % 2 == 1) 
      { 
       oddNumbers.Add(num); 
      } 
     } 

你也可以使用數組。的ForEach,像這樣:

 numbers.ForEach(num => 
     { 
      if (num % 2 == 1) 
       oddNumbers.Add(num); 
     });