我正在寻找一种优雅的方法来从元素n开始获取一个列表,而不必指定列表的长度。假设我们有一个多行字符串,我将其拆分成行,然后想要从第3行开始获取所有行的列表:
string.split("\n").slice(3,X) // But I don't know what X is...
我真正感兴趣的是,是否有办法获取split
调用返回的列表的引用,以便其长度可以替换为X
slice
来电,有点像幻想_
(在这种情况下,它会被视为slice(3,_.length)
)?在python中,不需要指定切片的最后一个元素。
当然我可以通过在拆分后使用临时变量来解决这个问题,或者创建一个语法很好的辅助函数,但我只是很好奇。
答案 0 :(得分:80)
只需删除不需要的前n个元素:
List(1,2,3,4).drop(2)
res0: List[Int] = List(3, 4)
或在你的情况下:
string.split("\n").drop(2)
还有配对方法.take(n)
执行相反的操作,您可以将其视为.slice(0,n)
。
如果您需要这两个部分,请使用.splitAt
:
val (left, right) = List(1,2,3,4).splitAt(2)
left: List[Int] = List(1, 2)
right: List[Int] = List(3, 4)
答案 1 :(得分:80)
正确的答案是takeRight(n)
:
"communism is sharing => resource saver".takeRight(3)
//> res0: String = ver
答案 2 :(得分:7)
你可以使用scala的list方法'takeRight',当List的长度不够时,这不会抛出异常,如下所示:
val t = List(1,2,3,4,5);
t.takeRight(3);
res1: List[Int] = List(3,4,5)
如果列表不超过您想要的时间,则不会抛出异常:
val t = List(4,5);
t.takeRight(3);
res1: List[Int] = List(4,5)
答案 3 :(得分:4)
获取最后2个元素:
List(1,2,3,4,5).reverseIterator.take(2)