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

输出:Alex约翰最大

N.B:如果您想在获得排序值后从高到低打印,则使用反转

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

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

最新更新