インデックスを使用してトラバース可能な aa の複数の要素を取得する簡単なスカラ イディオムはありますか。
私は次のようなものを探しています
val L=1 to 4 toList
L(List(1,2)) //doesn't work
今まで使ってきmap
たのですが、もっと「scala」なやり方がなかったのかなぁ
List(1,2) map {L(_)}
前もって感謝します
インデックスを使用してトラバース可能な aa の複数の要素を取得する簡単なスカラ イディオムはありますか。
私は次のようなものを探しています
val L=1 to 4 toList
L(List(1,2)) //doesn't work
今まで使ってきmap
たのですが、もっと「scala」なやり方がなかったのかなぁ
List(1,2) map {L(_)}
前もって感謝します
機能を追加する暗黙のクラスを追加できます。
implicit class RichIndexedSeq[T](seq: IndexedSeq[T]) {
def apply(i0: Int, i1: Int, is: Int*): Seq[T] = (i0+:i1+:is) map seq
}
apply
次に、1 つまたは複数のインデックスでシーケンスのメソッドを使用できます。
scala> val data = Vector(1,2,3,4,5)
data: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5)
scala> data(0)
res0: Int = 1
scala> data(0,2,4)
res1: Seq[Int] = ArrayBuffer(1, 3, 5)
あなたは内包でそれを行うことができますが、それはfor
あなたが使用しているコードよりも明確ではありませんmap
.
scala> val indices = List(1,2)
indices: List[Int] = List(1, 2)
scala> for (index <- indices) yield L(index)
res0: List[Int] = List(2, 3)
最も読みやすいのは、インデックスのリストを取り、それらのインデックスでtakeIndices(indices: List[Int])
与えられた a の値を返す独自の関数を実装することだと思います。List
例えば
L.takeIndices(List(1,2))
List[Int] = List(2,3)