я смог расплющить список, используя сгибСписок Свести с складка
flattenWithFold(Iterable list) => list.fold([], (List xs, s) {
s is Iterable ? xs.addAll(flattenWithFold(s)) : xs.add(s);
return xs;
});
При выполнении
print(flattenWithFold([1,[3,5,[1,2]],[2,1],6]));
Он производит правильный результат [1, 3, 5, 1, 2, 2, 1 , 6]
Но когда я пытаюсь реорганизовать использовать ..add, он производит неверный результат
flattenWithFold1(Iterable list) => list.fold([], (List xs, s) => xs..add(
s is Iterable ? xs.addAll(flattenWithFold1(s)) : s));
Может кто-нибудь объяснить, почему при выполнении есть null [1, 3, 5, 1, 2, null, null, 2, 1, null, 6]?
print(flattenWithFold1([1,[3,5,[1,2]],[2,1],6]));
Спасибо за пояснение @Harry. Есть ли эффективный способ сглаживания сбрасывания без использования возврата? Заранее спасибо. –
Вам просто нужно каскадировать addAll. Я не уверен, почему сгиб - это требование, потому что вы также можете сгладить (список Iterable) => list.expand ((item) => item is Iterable? Flatten (item): [item]); –
Использование расширения - эффективный способ. Я просто пытался понять, есть ли еще один эффективный способ сбрасывать. Спасибо @Alan –