![](/img/trans.png)
[英]why does the addAll() function for flutter Maps overwrite values if it's in a loop?
[英]Flutter: Why LinkedHashMap..addAll replaced all old data instead of append
樣品清單:
_events = [{ "name" : "A", "date" : "15 jun" },
{ "name" : "B", "date" : "15 jun" },
{ "name" : "C", "date" : "17 jun" },
{ "name" : "D", "date" : "17 jun" },]
kEvents = LinkedHashMap<DateTime, List<dynamic>>(equals: isSameDay, hashCode: getHashCode)
..addAll(_events);
int getHashCode(DateTime key) {
return key.day * 1000000 + key.month * 10000 + key.year;
}
我期望 kEvents 將顯示特定日期的所有數據,例如如果 kEvents['27 jun'] 它應該變成:
[{ "name" : "C", "date" : "17 jun" },
{ "name" : "D", "date" : "17 jun" },]
但是我的結果是:
[{ "name" : "D", "date" : "17 jun" }]
最后一項替換了前一項而不是附加到列表中......為什么?
kEvents
是一個LinkedHashMap
。 _events
是LinkedHashMap
的List
。 單個LinkedHashMap
只能為每個 key 存儲一個元素; 因此, 'name'
只有一個值, 'key'
只有一個值。
如果您想按日期重新組織_events
,那么您需要遍歷_events
並生成一個新的Map
,其中日期為鍵, List
為值。 例如:
var _events = [
{"name": "A", "date": "15 jun"},
{"name": "B", "date": "15 jun"},
{"name": "C", "date": "17 jun"},
{"name": "D", "date": "17 jun"},
];
void main() {
var byDate = <String, List<String>>{};
for (var map in _events) {
(byDate[map['date']!] ??= []).add(map['name']!);
}
print(byDate); // Prints: {15 jun: [A, B], 17 jun: [C, D]}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.