当前位置:  开发笔记 > 编程语言 > 正文

折平列表

如何解决《折平列表》经验,为你挑选了1个好方法。

我可以使用fold拼合列表

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 Terkel.. 5

你得到null你的结果,因为如果sIterable你正在做的xs..add(xs.addAll(flattenWithFold1(s))addAll是一种void方法,但是由于您将其用作表达式,因此返回null。因此,您要向中添加展平的元素xs,然后再添加null,这是void方法的返回值。



1> Harry Terkel..:

你得到null你的结果,因为如果sIterable你正在做的xs..add(xs.addAll(flattenWithFold1(s))addAll是一种void方法,但是由于您将其用作表达式,因此返回null。因此,您要向中添加展平的元素xs,然后再添加null,这是void方法的返回值。

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有