我想確保能否通過使用reduceLeft而不是foldLeft來實現此目的。我在列表使用reduceLeft代替scala中的foldLeft
val included = List(46, 19, 92).foldLeft(false) { (a, i) =>
| if (a) a else (i == 19)
| }
included: Boolean = true
但是我想用reduceLeft來完成相同的搜索一個給定的數字,這可能嗎?
我想確保能否通過使用reduceLeft而不是foldLeft來實現此目的。我在列表使用reduceLeft代替scala中的foldLeft
val included = List(46, 19, 92).foldLeft(false) { (a, i) =>
| if (a) a else (i == 19)
| }
included: Boolean = true
但是我想用reduceLeft來完成相同的搜索一個給定的數字,這可能嗎?
不是直接。類型往往是這樣的答案。
reduceLeft有型有點像:
List[A] => ((A,A) => A) => A
給出的列表,並且可以結合2的A值到1值的函數,你會得到一個單一的值回。
你可以做的會是這樣的:
val a = List(46, 19, 92).reduceLeft { (a, b) =>
if(b == 19) b else a
}
val included = a == 19
當然,你會得到更好的服務使用「包含」這比任何的這些選項。
正確的方法做,這是
val included = List(46, 19, 92).contains(19)
但是如果你會堅持使用reduceLeft
,那麼你可以這樣寫:
val included = List(46, 19, 92).reduceLeft { (a, b) =>
if (b == 19) b else a
} == 19
你不能做一個簡單的方法。用foldLeft你可以定義結果類型:它是你的累加器的類型,所以我是你給第一個參數的零元素的類型。
ReduceLeft使用集合的第一個元素作爲累加器的零元素。因此,結果類型將與列表中的元素相同,在您的情況下爲Int。
'contains',not'exists','list contains 19' vs'list exists(_ == 19)' –
正確,並且是固定的,這就是當我在手機上時寫回答的原因:)。 –