2012-12-11 82 views
5

此問題已在SO上以其中一種方式提出,但不是這樣。我剛剛過來了一個非常基本的問題,我正在尋找一個統計解決方案:-) 我得到了具有兩個整數屬性的對象列表。現在我想查找列表中所有對象的兩個屬性的最大值。
我想出了三種解決方案:在列表中查找兩個(或更多)屬性的最大值

第一種方法:

int max = Math.Max(list.Max(elem => elem.Nr), list.Max(elem => elem.OtherNr)); 

第二種方法:

public int Max(List<Thing> list) 
{ 
    int maxNr = 0; 

    foreach (var elem in list) 
    { 
    if (elem.Nr > maxNr) 
     maxNr = elem.Nr; 
    if (elem.OtherNr > maxNr) 
     maxNr = elem.OtherNr; 
    } 

    return maxNr; 
} 

第三種方法是通過兩個屬性來進行排序,然後只取首先進入並獲得一個或另一個財產。

我想找到最快的方法來做到這一點。因此,我喜歡第二個帖子(從性能角度來看)。儘管第一個更短,但你必須經歷兩次。

其他解決方案?

+1

它太慢了嗎?其實第一個看起來對我而言在可讀性和效率方面都很好。我假設沒有結構變化,你不會更快。 –

+0

不,我只是想知道什麼最快的算法是這個 – derape

回答

9

如果你

int max = list.Max(elem => Math.Max(elem.Nr, elem.OtherNr)); 

它仍然是一個單一的班輪,但只有遍歷列表一次。我認爲可以通過手工將效率稍稍降低來降低效率。

(還有,不要你需要從doubleint某處投在那裏?)

+0

我喜歡這個解決方案,它更好,並且幾乎與「手寫」一樣 – derape

8

使用LINQ如果你需要超過2個屬性(這是Math.Max限)的替代解決方案:

int max = list 
    .SelectMany(elem => new[]{ elem.Prop1, elem.Prop2, elem.Prop3 }) 
    .Max(); 
相關問題