konnte ich eine Liste glätten mit faltenFlatten Liste mit Fold
flattenWithFold(Iterable list) => list.fold([], (List xs, s) {
s is Iterable ? xs.addAll(flattenWithFold(s)) : xs.add(s);
return xs;
});
Wenn
Ausführungprint(flattenWithFold([1,[3,5,[1,2]],[2,1],6]));
Es richtiges Ergebnis erzeugt [1, 3, 5, 1, 2, 2, 1 , 6]
Aber wenn ich versuche zu verwenden .add zu Refactoring, es zu falschem Ergebnis
flattenWithFold1(Iterable list) => list.fold([], (List xs, s) => xs..add(
s is Iterable ? xs.addAll(flattenWithFold1(s)) : s));
Kann jemand bitte erklären, warum null [1, 3, 5, 1, 2, null, null, 2, 1, null, 6] beim Ausführen vorhanden sind?
print(flattenWithFold1([1,[3,5,[1,2]],[2,1],6]));
Danke für die Erklärung @Harry. Gibt es einen effektiven Weg, um Falten ohne Rücksendung zu reduzieren? Danke im Voraus. –
Sie müssen nur die addAll kaskadieren. Ich bin mir nicht sicher, warum fold ist eine Voraussetzung, weil Sie auch flatten könnten (Iterable Liste) => list.expand ((Element) => Element ist Iterable? Flatten (Element): [Element]); –
Verwenden von Expand ist ein effizienter Weg. Ich habe gerade versucht zu sehen, ob es einen anderen effizienten Weg mit der Falte gibt. Danke @Alan –