Ausgabe
Ich habe eine ansonsten leere Liste initialisiert und möchte überprüfen, ob dieser Eintrag wahr oder null ist. Da ich praktisch nicht jeden Eintrag zuerst mit füllen kann false
, muss ich prüfen, ob er null oder wahr ist.
List<bool> check = List<bool>();
Ob ich verwende:
(check[index]) ? dothis : dothat;
oder:
(check[index] != null) ? dothis : dothat;
beide werfen einen Bereichsfehler. Da ich es nicht initialisieren kann
List<bool> check = [false,false,false,false,false forever and ever];
Wie kann ich das lösen?
Lösung
Da ich es nicht initialisieren kann
List<bool> check = [false,false,false,false,false forever and ever];
Es klingt für mich so, als ob Sie eine dünn besiedelte List
. Wenn ja, verwenden Sie einfach ein Map<int, T>
anstelle von List<T>
. Dann check[index]
wird zurückgegeben, null
wenn das Element noch nicht hinzugefügt wurde:
var check = <int, bool>{};
...
(check[index] ?? false) ? dothis : dothat;
Im Fall von bool
wäre es noch besser, a zu verwenden Set<int>
und nur auf Vorhandensein zu prüfen, anstatt einen separaten bool
Wert beizubehalten:
var checked = <int>{};
...
checked.contains(index) ? dothis : dothat;
Beantwortet von – jamesdlin
Antwort geprüft von – Willingham (FixError Volunteer)