nny*_*thm 89 scala scala-collections
我试图在scala中得到一个子数组,我对它的正确方法有点困惑.我最想要的是你在python中如何做到这一点:
x = [3, 2, 1]
x[0:2]
Run Code Online (Sandbox Code Playgroud)
但我相当肯定你不能这样做.
最明显的方法是使用Java Arrays util库.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
Run Code Online (Sandbox Code Playgroud)
但它总是让我觉得在Scala中使用Java库有点脏.我找到的最"scalaic"方式就是
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
}
Run Code Online (Sandbox Code Playgroud)
但有更好的方法吗?
par*_*tic 122
你可以调用切片方法:
scala> Array("foo", "hoo", "goo", "ioo", "joo").slice(1, 4)
res6: Array[java.lang.String] = Array(hoo, goo, ioo)
Run Code Online (Sandbox Code Playgroud)
它在python中工作.
Key*_*r00 10
想象一下,你有一个包含ato的元素的数组f
scala> val array = ('a' to 'f').toArray // Array('a','b','c','d','e','f')
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过不同方式从中提取子数组:
删除前n个第一个元素 drop(n: Int)
array.drop(2) // Array('c','d','e','f')
用前n个元素 take(n: Int)
array.take(4) // Array('a','b','c','d')
选择任何元素间隔slice(from: Int, until: Int).请注意,until不包括在内.
array.slice(2,4) // Array('c','d')
切片方法严格等同于:
array.take(4).drop(2) // Array('c','d')
用以下内容排除最后n个元素dropRight(n: Int):
array.dropRight(4) // Array('a','b')
选择最后n个元素takeRight(n: Int):
array.takeRight(4) // Array('c','d','e','f')
参考:官方文件
| 归档时间: |
|
| 查看次数: |
55350 次 |
| 最近记录: |