2015-02-06 2 views
0

Если у меня есть список из десяти элементов в scala, как я могу создать новый список, состоящий только из элементов предыдущего списка из диапазона из двух индексов. Так что, если первоначальный список был десять пунктов тоскуют новые один может быть какScala как разбить список по определенному индексу

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

Пожалуйста, не используйте раскол в методе то не то, что я пытаюсь сделать.

+1

Можете ли вы привести пример того, чего вы пытаетесь достичь? Мне не очень понятно –

+6

Согласовано - как написано сейчас, это просто похоже на то, что вы ищете ['slice (начало, конец)'] (http://www.scala-lang.org/api/current/index. html#[email protected] (от: Int, до: Int): Список [A]) –

ответ

1

List имеет метод slice(from, to). Вероятно, вы должны использовать это. Я думал, что он использует структурный обмен, но это не так (как обсуждалось в комментариях).

+2

«возможно, использует структурный обмен» Это не (https://github.com/scala/scala/ blob/v2.11.5/src/library/scala/collection/immutable/List.scala # L1 - код для принятия (использует этот срез) создает новые минусы. –

+0

Странно для неизменной структуры, но хорошая информация. Спасибо. –

+0

вы не можете сделать структурное разделение между двумя списками минусов, если только оба имеют один и тот же конец. Так что, если бы было возможно только тогда, когда срез на самом деле просто капля (например, падение структурного обмена), и в этом случае все равно будет быть трудным, потому что, поскольку размер списка минусов недоступен дешево, вы не сразу знаете, когда назовёте срез, доходит ли до конца фрагмент. ne может построить срез Seq, который будет просто представлением (возможно, фактическим падением, чем создание представления), но это не будет List, и это предотвратит сбор элементов после 'to' –

0

Если я правильно понимаю ваш вопрос, вы можете сделать:

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

oldlist(0) to oldList(10) создает новый Range, который затем преобразуется в List.

Смежные вопросы