来自对象列表的飞镖扑动最大值

时间:2019-10-15 01:23:32

标签: flutter dart

正在寻找一些帮助,以便从颤动对象列表中的用户中选择最老的年龄...

users = [
  { id: 123, name: 'Bob', age: 25},
  { id: 345, name: 'Joe', age: 44},
  ...
];

4 个答案:

答案 0 :(得分:3)

首先请确保您的列表具有正确的类型和格式:

List<Map<String, dynamic>> users = [
  {"id": 123, "name": "Bob", "age": 25},
  {"id": 345, "name": "Joe", "age": 44},
  {"id": 35, "name": "Joxe", "age": 40},
];

然后您可以执行以下操作:

if (users != null && users.isNotEmpty) {
  users.sort((a, b) => a['age'].compareTo(b['age']));
  print(users.last['age']);
}

另一种方式是:

if (users != null && users.isNotEmpty) {
  dynamic max = users.first;
  users.forEach((e) {
    if (e['age'] > max['age']) max = e;
  });
  print(max['age']);
}

另一个:

if (users != null && users.isNotEmpty) {
  print(users.fold<int>(0, (max, e) => e['age'] > max ? e['age'] : max));
}

这需要import 'dart:math'

if (users != null && users.isNotEmpty) {
  print(users.map<int>((e) => e['age']).reduce(max));
}

答案 1 :(得分:2)

void main() {
  var users = [
    {"id": 123, "name": 'Bob', "age": 25},
    {"id": 345, "name": 'Joe', "age": 44},
    {"id": 35, "name": 'Joxe', "age": 40},
  ];
  users.sort(ageCompare);
  print(users.first);
}

int ageCompare(u1, u2) => u2['age'] - u1['age'];

https://dartpad.dartlang.org上尝试


或单线

  users.sort((Map u1, Map u2) => u2['age'] - u1['age']);
  print(users.first);

答案 2 :(得分:1)

我将使用列表reduce函数,文档here

var oldestUser = users.reduce((currentUser, nextUser) => currentUser['age'] > nextUser['age'] ? currentUser : nextUser)

答案 3 :(得分:0)

如果您使用Dart版本2.6.0-dev.7.0或更高版本,则可以使用静态扩展方法功能:

示例:

import 'package:enumerable/enumerable.dart';

void main(List<String> args) {
  final maxAge = users.max$1((e) => e['age'] as int);
  print(maxAge);
}

final users = [
  {'id': 123, 'name': 'Bob', 'age': 25},
  {'id': 345, 'name': 'Joe', 'age': 44},
];

结果:

44