2013-06-11 14 views
8

Jaki jest idiomatyczny sposób Dart do usunięcia wybranych kluczy z mapy? Poniżej używam tymczasowej pustej listy do przechowywania kluczy String. Czy istnieje czystszy sposób?Usunąć wybrane klucze z mapy Dart

List<String> emptyList = new List<String>(); 
_objTable.keys.forEach((String name) { 
    if (_objTable[name].indices.isEmpty) { 
    emptyList.add(name); 
    print("OBJ: deleting empty object=$name loaded from url=$url"); 
    } 
}); 
emptyList.forEach((String name) => _objTable.remove(name)); 

Odpowiedz

8

można zrobić coś takiego:

_objTable.keys 
    .where((k) => _objTable[k].indices.isEmpty) // filter keys 
    .toList() // create a copy to avoid concurrent modifications 
    .forEach(_objTable.remove); // remove selected keys 
+0

pracował podobny pewien urok, dzięki! Nie mogę jednak zrozumieć części .forEach (_objTable.remove). Czy przekazywanie funkcji _objTable.remove do .forEach()? – Everton

+3

Tutaj przekazuję funkcję wywoływania każdego elementu na liście. Zasadniczo jest to jak '.forEach ((name) => _objTable.remove (name))'. –