2

コレクションで max と argmax を使用したい。maxには問題がありましたが、argmax には問題がありませんでした。これは、私が考えていたものとは異なって見えます。ここにあるものはすべて、min と argmin にも適用できます。同等の動作をするコードの例 (エラー処理を除く):

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 と max_byに似ています。

質問:

  1. これらのような API 呼び出しは既にありますか (確認していない名前で)?
  2. 作る予定はありますか?
  3. 問題を提起する必要がありますか?
4

1 に答える 1

3

あるとは思いませんが、あなたの例に基づいた非常に簡単な実装を次に示します。

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

これは、一度だけ検索する場合は並べ替えよりも高速ですが、argmaxのロジックが複雑な場合は、少し扱いに​​くくなる可能性があります。

Dartisansのビデオの1つで、開発者の1人が、多くの一般的なパターンを簡単にしようとしていると述べていたので、このようなものを作成すると、標準ライブラリに入る可能性がかなり高くなると思います。それには十分なケースです。

于 2012-12-15T04:29:35.527 に答える