Clojure Удаляют объект из Вектора в Указанном Местоположении

Как насчет списка словаря?

Dictionary<string, int> list = new Dictionary<string, int>();
foreach( var item in Enum.GetNames(typeof(MyEnum)) )
{
    list.Add(item, (int)Enum.Parse(typeof(MyEnum), item));
}

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

32
задан Hamza Yerlikaya 8 September 2009 в 16:40
поделиться

2 ответа

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

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

См .:

  • subvec на clojuredocs.org
  • subvec по адресу clojure.github.io , где официальный сайт указывает на.
29
ответ дан 27 November 2019 в 20:17
поделиться
user=> (def a [1 2 3 4 5])
user=> (time (dotimes [n 100000] (vec (concat (take 2 a) (drop 3 a)))))
"Elapsed time: 1185.539413 msecs"
user=> (time (dotimes [n 100000] (vec (concat (subvec a 0 2) (subvec a 3 5)))))
"Elapsed time: 760.072048 msecs"

Ага - subvec самый быстрый

15
ответ дан 27 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: