如何从颤动的另一个列表中获取最高值列表

Posted

技术标签:

【中文标题】如何从颤动的另一个列表中获取最高值列表【英文标题】:How to get a list of highest values from another list in flutter 【发布时间】:2022-01-17 16:14:26 【问题描述】:

我有一个包含 5 个对象的玩家列表..

"data": [
    
      "id": 74,
      "name": "name 1",
      "type": "defender",
      "value": 10
    ,
    
      "id": 7422,
      "name": "name 2",
      "type": "defender",
      "value": 20
    ,
    
      "id": 2213,
      "name": "Max",
      "type": "defender",
      "value": 30
    ,
    
      "id": 3333,
      "name": "John",
      "type": "defender",
      "value": 40
    ,
    
      "id": 8793,
      "name": "Alex",
      "type": "defender",
      "value": 50
    
  ]

如何从数据列表中获取包含 3 项最高值的列表?

预期结果 => [Max , John , Alex]

我只需要基于最高价值的前 3 个项目

【问题讨论】:

您只想从 json 列表或颤振列表中获取 3 个最大值(实际上是对象)? 只带3人以上或以下? @Jigangsu from flutter list,我已经将json数据解析成一个flutter列表,我想从这个flutter列表中生成前3个最高值 @ArbiterChil 我需要最高值,请查看预期结果 生成是什么意思?你有清单是的,你想做的是采摘最高的价值吗?你是这个意思吗?那么这三个值应该只显示 【参考方案1】:

为什么不按值对这个列表进行排序,然后从列表中取出前三个值。

【讨论】:

欢迎来到 SO!请以增加网站价值的方式回答您的问题。您已经提出了已接受的答案与代码的内容。所以,你应该删除它或改进它。【参考方案2】:

先根据值对数据进行排序,然后找出最大值

void main() 
  List<Map<String, dynamic>> data = [
    "id": 74, "name": "name 1", "type": "defender", "value": 10,
    "id": 7422, "name": "name 2", "type": "defender", "value": 20,
    "id": 2213, "name": "Max", "type": "defender", "value": 30,
    "id": 3333, "name": "John", "type": "defender", "value": 40,
    "id": 8793, "name": "Alex", "type": "defender", "value": 50
  ];



// sort the data based on 
  if (data != null && data.isNotEmpty) 
    data.sort((a, b) => a['value'].compareTo(b['value']));
  
// you can simply do this
  for( int i =data.length-3; i< data.length;i++)
    print(data[i]["name"]);
  
  

  // truncate the max value from the bottom part
  List<Map<String, dynamic>> data1 = data.sublist(data.length-3, data.length);
  
// show the data whom hold the max value
  data1.reversed.forEach((e)
    print(e["name"]);
  );

输出:亚历克斯 约翰 最大

注意:如果要在获得排序值后从高到低打印,则使用 reversed

【讨论】:

传奇!,知道如何获得最小的物品吗? 只打印从上到下for( int i =0; i&lt; 3;i++) print(data[i]["name"]); 【参考方案3】:
        List<Map<String, dynamic>> users =[
    
      "id": 74,
      "name": "name 1",
      "type": "defender",
      "value": 10
    ,
    
      "id": 7422,
      "name": "name 2",
      "type": "defender",
      "value": 20
    ,
    
      "id": 2213,
      "name": "Max",
      "type": "defender",
      "value": 30
    ,
    
      "id": 3333,
      "name": "John",
      "type": "defender",
      "value": 40
    ,
    
      "id": 8793,
      "name": "Alex",
      "type": "defender",
      "value": 50
    
  ]


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

用户列表已经在上面的代码中排序。所以列表的最后 3 项是最大值!

【讨论】:

没有排序的时候需要先排序再收集后三个值,所以使用排序也很安全【参考方案4】:

对我来说,如果你有一个标准是 20 或 30 的值更高

List<Map<String,dynamic>> items = [
      "id": 74,
      "name": "name 1",
      "type": "defender",
      "value": 10
    ,
    
      "id": 7422,
      "name": "name 2",
      "type": "defender",
      "value": 20
    ,
    
      "id": 2213,
      "name": "Max",
      "type": "defender",
      "value": 30
    ,
    
      "id": 3333,
      "name": "John",
      "type": "defender",
      "value": 40
    ,
    
      "id": 8793,
      "name": "Alex",
      "type": "defender",
      "value": 50
    ];

然后对它们进行排序就像这样用 where

items.where((e) => e['value'] > 20).toList()..sort((a,b)=>b['value'].toString().compareTo(a['value'].toString()));

你会得到一组另外的数据

[
id: 8793, name: Alex, type: defender, value: 50, 
id: 3333, name: John, type: defender, value: 40, 
id: 2213, name: Max, type: defender, value: 30
]

【讨论】:

以上是关于如何从颤动的另一个列表中获取最高值列表的主要内容,如果未能解决你的问题,请参考以下文章

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

如何在颤动的列表中获得所需的数据?

如何从飞镖颤动中的键或键值对获取索引

如何从 bigquery 中的另一个表中获取短语列表的表字段中的匹配计数?

如何从列表中删除项目并返回新列表而不在颤动中删除项目

无法在颤动中正确显示列表