私はScalaで新しいです。Scalaのリストのインデックス
例えば、私は
val s = List(5, 11, 15, 7)
のようなリストを持っていると私は私が言語を使用することはできません10以上の要素のインデックスの新しいリストを作成するためにラムダ関数を必要としますScalaライブラリまたは関数標準的なScalaの機会のみ。
どのようにこれらの要素のインデックスを計算できますか?ありがとうございました!
私はScalaで新しいです。Scalaのリストのインデックス
例えば、私は
val s = List(5, 11, 15, 7)
のようなリストを持っていると私は私が言語を使用することはできません10以上の要素のインデックスの新しいリストを作成するためにラムダ関数を必要としますScalaライブラリまたは関数標準的なScalaの機会のみ。
どのようにこれらの要素のインデックスを計算できますか?ありがとうございました!
は、このコードを試してみてください。
val lambda = (list: List[Int]) => {
def filterList(l : List[Int], condition : Int, index: Int, acc: List[(Int, Int)]) : List[(Int, Int)] = l match {
case List() => acc
case h::tail =>
if (h > condition) filterList(tail, condition, index + 1, (index, h) :: acc)
else filterList(tail, condition, index + 1, acc)
}
filterList(list, 10, 0, List())
}
val r = lambda(s)
うーん...これを解決するための5月の方法があります。
まずvar
と、より広範囲「不可欠」様のソリューションを見ることができます
、
val lambda = (list: List[Int]) => {
var indexList = List.empty[Int]
var i = 0
for (elem <- list) {
if (elem > 10) indexList = i +: indexList
i = i + 1
}
indexList.reverse
}
今...私たちは、より多くのビット「機能的に似た」再帰的なアプローチで見ることができ
val lambda = (list: List[Int]) => {
def _inner(list: List[Int], index: Int, indexList: List[Int]) = {
list match {
case Nil => indexList
case elem :: tail => {
if (elem > 10) _inner(tail, index + 1, index +: indexList)
else _inner(tail, index + 1, indexList)
}
}
}
_inner(list, 0, List.empty[Int]).reverse
}
*名前付きメソッド* a *ラムダ*を呼び出すのは面白いです。 –
はい...面白いです。 –
あなたの宿題...? –
@groenhenに近い) – Alex
他の人に、自分が割り当てたものか実際のコースの割り当てのどちらが明確であるかの回答を提供することは、どのように役立ちますか? –