2016-11-08 6 views
2

Я пытаюсь найти наиболее эффективный способ вытащить элемент из List[Map[String, String]] в scala.Поп Последний элемент из списка Scala

То, что я хочу что-то вроде этого:

val last = myList.pop 

Здесь последний должен иметь последний элемент и MyList должны иметь все, кроме последнего.

Я могу сделать это в двух операциях, используя last и init, но для этого потребуются две линейные операции. Как я могу избежать этого?

+0

Нужно ли добавлять и удалять элементы взаимозаменяемо? Или вы хотите сделать: 'list.pop', пока список не будет пуст? Шаблон использования может давать разные подходы. – maasg

+3

Почему бы не использовать стек? Или вектор? Или в значительной степени ничего, кроме списка - выбор списка, когда вы знаете, что вам нужно будет работать с последним элементом ... странно –

ответ

-1

мы можем использовать takeRight Funtion, который работает так же, как принять работы, но начинается в конце последовательности и движется вперед, принимая заданное число элементов от конца последовательности:

val last = mylist.takeRight(1) 

Этот оператор предоставит вам последний элемент.

2

Эффективный способ поп последнего элемента списка, сохраняя при этом остальных элементах заключается в обратном список:

val last::rest = list.reverse 

Это имеет эффект оставляя остальную часть списка в обратном направлении, так что следующий поп:

val last2 :: rest2 = rest 

Так что «поп» - все остальные элементы в списке дешевые O (1). Обратите внимание, что эта операция завершится неудачно, если список пуст, поэтому его необходимо будет соответствующим образом защитить.

При этом, в зависимости от использования, лучше рассмотреть другие структуры данных. Классическая структура FILO представляет собой стек. Индексируемые структуры, такие как массивы, также могут быть базой для реализации.

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