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 的一个视频中,其中一位开发人员提到了他们如何尝试使许多常见模式变得简单,所以我认为如果你制作一个类似这样的东西很有可能将其纳入标准库足够好的案例。

于 2012-12-15T04:29:35.527 回答