我嘗試使用不同的欄位名稱來決議 Map 的最高值。在這種情況下,highestValue 應該是“Luke”
String? highestValue;
Map<Object?, Object?>? points =
{
"Vader": 40,
"Obi-Wan": 20,
"Luke": 50,
};
highestValue = ...
謝謝
uj5u.com熱心網友回復:
你的地圖輸入得很糟糕,所以我不確定我們需要在這里考慮什么情況。例如,如果值不是,應該發生什么int?但是我已經做了以下示例來說明如何做到這一點:
void main() {
String? highestValue;
Map<Object?, Object?>? points =
{
"Vader": 40,
"Obi-Wan": 20,
"Luke": 50,
};
highestValue = points.entries.reduce((a, b) {
final aValue = a.value;
final bValue = b.value;
if (aValue is! int) {
return b;
}
if (bValue is! int) {
return a;
}
return aValue > bValue ? a : b;
}).key as String?;
print(highestValue); // Luke
}
但是正如您所看到的,很多邏輯都來自于您的地圖包含Object?物件而不是更具體的型別(如int.
在評論中請求后添加了額外的解決方案
如果我們想提取第二大的,我們開始進入一個更有意義的領域,即生成一個串列然后對其進行排序。
所以我們可以根據地圖做這樣的事情:
void main() {
String? highestValue;
Map<Object?, Object?>? points = {
"Vader": 40,
"Obi-Wan": 20,
"Obi-Wan": 20,
"Luke": 50,
};
final sortedEntries = points.entries.toList()
..sort((entry1, entry2) {
final aValue = entry1.value;
final bValue = entry2.value;
if (aValue is! int) {
return 1;
}
if (bValue is! int) {
return -1;
}
return bValue.compareTo(aValue);
});
sortedEntries
.forEach((entry) => print('Key: ${entry.key} | Value: ${entry.value}'));
// Key: Luke | Value: 50
// Key: Vader | Value: 40
// Key: Obi-Wan | Value: 20
String nameOfTheSecondLargest = sortedEntries[1].key as String;
print(nameOfTheSecondLargest); // Vader
}
uj5u.com熱心網友回復:
Map<String, int>? points =
{
"Vader": 40,
"Obi-Wan": 20,
"Luke": 50,
};
String highest = points.keys.first;
int max = points.values.first;
points.forEach((key, value) {
if(max < value){
max=value;
highest = key;
}
});
你可以做這樣的事情。更容易理解。
uj5u.com熱心網友回復:
最簡單的方法:
進口:
import 'dart:math';
然后
Map<Object?, Object?> points = {
"Vader": 40,
"Obi-Wan": 20,
"Luke": 50,
};
var highestValue = (points.values.toList().map((e) => e as int).reduce(max));
print(highestValue);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/494746.html
標籤:镖
