Scala 中视图的使用
Use of View in Scala
我正在解决问题过滤列表中的位置:(对于给定的整数列表,return一个新列表删除奇数位置的元素)
我想出了
arr.zipWithIndex.filter(_._2 %2 == 1).map(_._1)
但是有人建议下面的代码会更快
arr.view.zipWithIndex.filter{ _._2 % 2 != 0 }.map { _._1}.force.toList
我知道,View 创建了无条件集合(懒惰求值),但是
在哪一步(方法调用)它会帮助我们。
含义:
arr.view,创建 zipWithIndex 将在其上工作的视图,zipWithIndex 将处理每个元素以创建值和索引的映射。我想到现在为止,没有优化。
filter 方法必须对每个元素都起作用,然后它才能跳过或 select 它。
我不确定,在这种情况下添加视图会有什么帮助。
使用view
意味着所有的操作都可以一次发生,而不是一次发生一个。
arr.zipWithIndex.filter(_._2 %2 == 1).map(_._1)
这有效,但它会在此过程中创建 3 个新列表,首先它会运行 zipWithIndex
生成一个包含结果的新列表。然后将新列表传递给 filter
,创建另一个列表,最后在该列表上调用 map
生成最终列表。
所以我们创建了两个我们并不真正需要的中间列表。
arr.view.zipWithIndex.filter{ _._2 % 2 != 0 }.map { _._1}.force.toList
此版本使用 view
,因此可以一次性执行所有这些操作,而无需在每个步骤中创建那些中间集合。
我正在解决问题过滤列表中的位置:(对于给定的整数列表,return一个新列表删除奇数位置的元素)
我想出了
arr.zipWithIndex.filter(_._2 %2 == 1).map(_._1)
但是有人建议下面的代码会更快
arr.view.zipWithIndex.filter{ _._2 % 2 != 0 }.map { _._1}.force.toList
我知道,View 创建了无条件集合(懒惰求值),但是 在哪一步(方法调用)它会帮助我们。 含义:
arr.view,创建 zipWithIndex 将在其上工作的视图,zipWithIndex 将处理每个元素以创建值和索引的映射。我想到现在为止,没有优化。
filter 方法必须对每个元素都起作用,然后它才能跳过或 select 它。 我不确定,在这种情况下添加视图会有什么帮助。
使用view
意味着所有的操作都可以一次发生,而不是一次发生一个。
arr.zipWithIndex.filter(_._2 %2 == 1).map(_._1)
这有效,但它会在此过程中创建 3 个新列表,首先它会运行 zipWithIndex
生成一个包含结果的新列表。然后将新列表传递给 filter
,创建另一个列表,最后在该列表上调用 map
生成最终列表。
所以我们创建了两个我们并不真正需要的中间列表。
arr.view.zipWithIndex.filter{ _._2 % 2 != 0 }.map { _._1}.force.toList
此版本使用 view
,因此可以一次性执行所有这些操作,而无需在每个步骤中创建那些中间集合。