任何max和argmax?

时间:2012-12-14 18:55:22

标签: dart

我想在集合上使用max和argmax。我看到issue最大但不是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 and max_by

问题:

  1. 是否已经有这样的API调用(在某些名称下我没有检查过)?
  2. 有没有计划制作它们?
  3. 我应该提出问题吗?

1 个答案:

答案 0 :(得分:3)

我认为没有,但这是基于你的例子的一个非常简单的实现:

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

如果您只想查找一次,这比排序更快,但如果您的argmax具有复杂的逻辑,这会变得有点笨拙。

在其中一个Dartisans视频中,其中一个开发者提到他们是如何试图让很多常见模式变得容易的,所以我认为这样的事情很有可能成为标准库你为它做了一个足够好的案例。