57

リストの長さを指定することなく、要素 n 以降のリストのスライスを取得するエレガントな方法を探しています。行に分割した複数行の文字列があり、3 行目以降のすべての行のリストを取得したいとします。

string.split("\n").slice(3,X)       // But I don't know what X is...

ここで私が本当に興味を持っているのは、呼び出しによって返されたリストの参照を取得して、その長さを呼び出し時にsplit代入できる方法があるかどうかです。 ) ?のように読みます。Python では、スライスの最後の要素を指定する必要はありません。Xslice_slice(3,_.length)

もちろん、分割後に一時変数を使用するか、適切な構文でヘルパー関数を作成することでこれを解決できますが、ちょっと興味があります。

4

4 に答える 4

96

不要な最初の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)
于 2013-03-06T22:21:10.050 に答える
90

正解はtakeRight(n)次のとおりです。

"communism is sharing => resource saver".takeRight(3)
                                              //> res0: String = ver
于 2015-03-16T20:05:37.730 に答える
10

scala のリスト メソッド 'takeRight' を使用できます。これは、リストの長さが十分でない場合に例外をスローしません。次のように:

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)
于 2016-09-27T08:32:00.363 に答える
4

最後の 2 つの要素を取得します。

List(1,2,3,4,5).reverseIterator.take(2)

于 2013-09-11T04:50:52.420 に答える