dart 获取列表对象中的最大值

p8ekf7hl  于 2023-06-27  发布在  其他
关注(0)|答案(4)|浏览(131)

如何获取对象列表中的最大值?我想对比一下案件编号

print(_abcBloc.vpStream.value);

 _abcBloc.vpStream.value
                .sort((a, b) => a['caseNumber'].compareTo(b['caseNumber']));

 print(_abcBloc.vpStream.value.last['caseNumber']);

错误

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type '(dynamic, dynamic) => dynamic' is not a subtype of type '(ABC, ABC) => int' of 'compare'

这是_abcBloc.vpStream.value输出:

[ABC(priority: null,caseNumber: 1,....), ABC(priority: null, caseNumber:2,...)]
zujrkrfu

zujrkrfu1#

我还想补充一点,如果你只想找到最大的值,你不需要sortMap。您可以使用reduce方法来迭代列表中的每个值,并确定要在迭代中保留的值:

void main() {
  final listOfMaps = [
    {'caseNumber': 1},
    {'caseNumber': 3},
    {'caseNumber': 2}
  ];

  final mapWithBiggestCaseNumber =
      listOfMaps.reduce((a, b) => a['caseNumber'] > b['caseNumber'] ? a : b);

  print(mapWithBiggestCaseNumber); // {caseNumber: 3}
}
2ekbmq32

2ekbmq322#

你可以使用数学库和reduce来检查最大值

import 'dart:math';

num biggest = _abcBloc.vpStream.value
     .map((abc) => abc.caseNumber).reduce(max);
xytpbqjk

xytpbqjk3#

如注解中所述,只需将lambda中的参数类型写成(ABC a, ABC b),以告知Dart编译器lambda的类型。如果没有这些类型,Dart编译器会假设它们是dynamic,这就引发了您面临的问题。
编辑:正如其他答案所指出的,你不应该使用sort调用,因为它的效率(O(nlogn))比它需要的(O(n))低。因此,虽然我所说的工作,它会更好地使用减少调用。

eqfvzcg8

eqfvzcg84#

class CustomObject {
  int value;

  CustomObject(this.value);
}

void main() {
  List<CustomObject> objects = [
    CustomObject(5),
    CustomObject(10),
    CustomObject(3),
    CustomObject(8),
  ];

  CustomObject maxObject = objects.reduce((a, b) => a.value > b.value ? a : b);
  print('The object with the biggest value is: ${maxObject.value}');
}

在此示例中,CustomObject类具有名为value的int属性。reduce函数用于对象列表,比较每个对象的值属性,并找到具有最大值的对象。生成的对象存储在maxObject变量中,并打印其值。
请注意,此示例假定列表不为空。如有必要,应添加其他检查以处理空列表。

相关问题