2012-12-14 29 views
2

我想在集合上使用max和argmax。我看到一個issue爲最大但不是argmax,它看起來不同於我的想法。這裏的一切都適用於min和argmin。具有等效行爲(減去錯誤處理)的代碼示例:任何max和argmax?

import 'dart:html'; 
import 'dart:math' as math; 

void main() { 
    final nums = [3, 1, 2]; 
    final animalNames = ['cat', 'turtle', 'sheep']; 
    final highest = nums.reduce(nums[0], (stored, curr) => math.max(stored, curr)); 
    final longest = animalNames.reduce(animalNames[0], longerString); 
    print('highest: $highest'); 
    print('longest: $longest'); 
} 

String longerString(final String first, final String second) { 
    if (first.length < second.length) { 
    return second; 
    } else { 
    return first; 
    } 
} 

我一直在尋找的API,但還沒有找到像什麼:

final highest = nums.max; 
final longest = animalNames.argmax((name) => name.length); 

到Ruby max and max_by類似。

問題:

  1. 是否有API調用像這些已經(在某些名字我沒有檢查)?
  2. 有沒有計劃讓他們?
  3. 我應該提出一個問題嗎?
+2

請在這裏提交一個錯誤併發佈一個鏈接:)謝謝! –

回答

3

我不覺得有什麼,但這裏根據你的例子相當簡單的實現:

animalNames.reduce("", (prev, cur) => prev.length > cur.length ? prev : cur); 

這是比排序,如果你只是想看看它一次更快,但可以如果您的argmax具有複雜的邏輯,請稍微笨拙。

在其中一個Dartisans視頻中,其中一位開發人員提到了他們如何試圖使很多常見模式變得容易,所以我認爲像這樣的東西將有很大的機會進入標準庫如果你爲它做了一個足夠好的案例。

+0

感謝您的回覆。我不知道三元運營商在達特。我會盡我所能說明情況。 –