1. ホーム
  2. scala

[解決済み] Scalaでサブアレイを取得する正しい方法は何ですか?

2022-12-03 01:30:51

質問

私はscalaで部分配列を取得しようとしていますが、それを行うための適切な方法が何であるかに少し混乱しています。 私が最も欲しいのは、あなたがパイソンでそれを行うことができる方法のようなものでしょう。

x = [3, 2, 1]
x[0:2]

というのがありますが、これができないのは間違いないです。

最も明白な方法は、Java Arrays util ライブラリを使用することでしょう。

import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)

しかし、ScalaでJavaのライブラリを使うのは、いつもちょっと汚らしい感じがするんです。 私が見つけた最もquot;scala的な方法は、次のようなものです。

def main(args: List[String]) {
    val start = Array(1, 2, 3)
    arrayCopy(start, 0, 2)
}
def arrayCopy[A](arr: Array[A], start: Int, end: Int)(implicit manifest: Manifest[A]): Array[A] = {
    val ret = new Array(end - start)
    Array.copy(arr, start, ret, 0, end - start)
    ret
}

とありますが、もっと良い方法はないのでしょうか?

どのように解決するのですか?

sliceメソッドを呼び出すことができます。

scala> Array("foo", "hoo", "goo", "ioo", "joo").slice(1, 4)
res6: Array[java.lang.String] = Array(hoo, goo, ioo)

pythonと同じように動作します。