簡體   English   中英

Flutter:為什么 LinkedHashMap..addAll 替換了所有舊數據而不是 append

[英]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 _eventsLinkedHashMapList 單個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.

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