我有一个具有此结构的Map列表字段。我想获得具有最高金额的Map在这种情况下第三个Map{金额:400名称:“乔”id:“3df”},出价:[ {金额:200姓名:“James”id:“1df”},{金额:300姓名:“Joseph”id:“2df”},{金额:400姓名:“Joe”id:“3df”},]
4sup72z81#
List<Map<String, dynamic>> map= [ { 'amount': 200, 'name': "James", 'id': "1df" }, { 'amount': 300, 'name': "Joseph", 'id': "2df" }, { 'amount': 400 ,'name': "Joe" ,'id': "3df" }, ]; map.sort((a, b) => b['amount'].compareTo(a['amount'])); print(map[0]);
字符串如果您不想打乱您原始Map顺序,请创建一个临时Map并对其进行排序以获得您所需的元素。
6fe3ivhb2#
保持列表顺序
List<Map<String, dynamic>> bids= [ { 'amount': 200, 'name': "James", 'id': "1df" }, { 'amount': 300, 'name': "Joseph", 'id': "2df" }, { 'amount': 400 ,'name': "Joe" ,'id': "3df" }, ]; if (bids.isNotEmpty) { var max = bids[0]; bids.forEach((item) { if (item['amount'] > max['amount']) max = item; }); print(max['amount']); print(bids); }
字符串
输出
的数据
vmdwslir3#
根据这个猜测What is the algorithm used in sort method in dart?,Dart List.sort的时间复杂度为O(nLog(n))你可以用O(N)的时间复杂度(更快)和恒定的内存复杂度来实现这一点,而不需要改变你的初始列表,如下所示:
List.sort
O(nLog(n))
O(N)
void main() { double maxBid = getMaxBid([ {'amount': 200, 'name': "James", 'id': "1df"}, {'amount': 300, 'name': "Joseph", 'id': "2df"}, {'amount': 400, 'name': "Joe", 'id': "3df"}, ]); print("Max Bid is $maxBid"); } double getMaxBid(List<Map<String, dynamic>> bids) { double maxBid = -double.infinity; // or zero depending on your bid range for (var bid in bids) { double bidAmount = bid["amount"]; if (bidAmount <= maxBid) continue; maxBid = bidAmount; } return maxBid; }
3条答案
按热度按时间4sup72z81#
字符串
如果您不想打乱您原始Map顺序,请创建一个临时Map并对其进行排序以获得您所需的元素。
6fe3ivhb2#
保持列表顺序
字符串
输出
的数据
vmdwslir3#
根据这个猜测What is the algorithm used in sort method in dart?,Dart
List.sort
的时间复杂度为O(nLog(n))
你可以用
O(N)
的时间复杂度(更快)和恒定的内存复杂度来实现这一点,而不需要改变你的初始列表,如下所示:字符串