簡體   English   中英

如何從 flutter 中的另一個列表中獲取最高值列表

[英]How to get a list of highest values from another list in flutter

我有一個包含 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 項

你為什么不按值對這個列表進行排序,然后從列表中取出前三個值。

首先根據值對數據進行排序,然后找出最大值

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"]);
  });
}

Output:亞歷克斯·約翰·馬克斯

注意:如果要在獲得排序值后從高到低打印,則使用 reversed

        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 項是最大值!

對我來說,如果您有一個標准,即 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
    }];

然后對它們進行排序就像這樣

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}
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM