2015-02-06 32 views
0

如果我在scala中有十個元素的列表,我如何創建一個新列表,該列表僅包含兩個索引範圍內前一列表的元素。因此,如果原始列表是十個項目,新的可能會像Scala如何在特定索引處拆分列表

Val N=Oldlist(0) to Oldlist(10) 

請不要使用方法,而不是我想要做的拆分。

+1

你能舉一個你想要實現的例子嗎?我不太清楚 – 2015-02-06 16:08:18

+6

同意 - 因爲它現在寫了,它聽起來像你正在尋找['片(開始,結束)'](http://www.scala-lang.org/api/current/index。 html#[email protected](來自:Int,直到:Int):List [A]) – 2015-02-06 16:11:14

回答

1

List有一個slice(from, to)方法。你應該使用它。我認爲它使用了結構共享,但它沒有(正如評論中所討論的那樣)。

+2

「可能使用結構共享」它不會(https://github.com/scala/scala/ blob/v2.11.5/src/library/scala/collection/immutable/List.scala#L1 - take的代碼(使用哪個slice)會產生新的缺點 – 2015-02-06 16:59:00

+0

對於一個不可變的結構來說很奇怪,但是很好的信息謝謝。 – 2015-02-06 17:14:51

+0

沒有辦法在兩個利弊表之間進行結構性共享,除非兩者都有相同的結局,所以如果只有當切片實際上只是一個下跌(當然,下跌做結構性分享),並且在這種情況下做是困難的,因爲,由於缺點列表的大小不便宜,你不知道在調用切片時是否切片到底.O ne可以創建一個片段Seq,它只是一個視圖,(可能是實際拖放,而不是創建一個視圖),但這不會是一個List,並且它會阻止在'to'之後收集元素 – 2015-02-06 18:14:39

0

如果我理解正確的話你的問題,你可以這樣做:

val list = (oldlist(0) to oldList(10)).toList 

oldlist(0) to oldList(10)創建一個新的Range,然後將其轉換爲List