ArrayStack Удалить метод? - PullRequest
0 голосов
/ 02 мая 2011

Есть ли метод, который делает то же, что и Java remove в классе ArrayStack?Или это можно написать в Scala?

Ответы [ 3 ]

1 голос
/ 02 мая 2011

Все типы коллекций Scala поддерживают добавление / удаление элементов в начале или в конце (с различными компромиссами производительности) и ограничены по размеру только некоторыми свойствами JVM, такими как максимальный размер указателей.

Так что, если это единственная причина, по которой вы используете Stack, вы выбрали неправильный тип коллекции. Учитывая требование иметь возможность удалять элементы из середины коллекции, что-то вроде Vector будет намного лучше подходить.

1 голос
/ 02 мая 2011

Вы можете использовать filterNot(_ == o) для создания другого стека с отсутствующими экземплярами o (по крайней мере, в 2.9), и вы можете stack.slice(0,n) ++ stack.slice(n+1,stack.length) для создания нового стека с отсутствующим индексированным элементом.

Но нет, точного аналога нет, возможно, потому, что удаление элемента в произвольной позиции в массиве - вещь с низкой производительностью.


Редактировать: slice мне кажется глючным, на самом деле, в 2.9.0.RC2 (я подал отчет об ошибке с кодом, чтобы исправить это, так что это будет исправлено для 2.9.0.final, предположительно). А в 2.8.1 вы должны создать новый ArrayStack вручную. Поэтому я думаю, что ответ на данный момент довольно решительное «нет».


Редактировать: slice было исправлено, поэтому начиная с 2.9.0.RC4 и позже подход среза должен работать.

0 голосов
/ 03 мая 2011

Может быть, это может соответствовать вашим потребностям:

scala> import collection.mutable.Stack
import collection.mutable.Stack

scala> val s = new Stack[Int]
s: scala.collection.mutable.Stack[Int] = Stack()

scala> s push 1
res0: s.type = Stack(1)

scala> s push 2
res1: s.type = Stack(2, 1)

scala> s push 3
res2: s.type = Stack(3, 2, 1)

scala> s pop
res3: Int = 3

scala> s pop
res4: Int = 2

scala> s pop
res5: Int = 1

Или существует также неизменяемая версия класса Stack.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...