【发布时间】:2017-04-14 01:55:40
【问题描述】:
我们需要找到整数列表的所有公因数:
val b = List(4, 8, 12)
b: List[Int] = List(4, 8, 12)
获取列表中的最小值:
val min_b = b.min
min_b: Int = 4
遍历从 1 到 min_b 的范围并检查 b 中的每个元素是否可以被迭代器的当前值整除,但输出包含空 AnyVals:
val factors_of_b = (1 to min_b)
.map { x => if (b.forall{ z => z % x == 0 }) x }
结果:
factors_of_b: scala.collection.immutable.IndexedSeq[AnyVal] = Vector(1, 2, (), 4)
用零代替不适用的因素并将结果过滤为零是一种解决方法,但也许存在一种更清洁、更类似于 Scala 的解决方案?
val factors_of_b = (1 to min_b)
.map { x => if(b.forall{ z => z % x == 0 }) x else 0 }
.filterNot(_ == 0)
结果:
factors_of_b: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 4)
【问题讨论】:
-
为了正确格式化较大的代码片段,缩进四个空格。背包适用于小的单行代码。
标签: scala functional-programming factors