Как я получаю последовательность чисел в отсортированном наборе, которые являются между двумя целыми числами в clojure?

Скажите, что у меня есть отсортированный набор целых чисел, xs, и я хочу получить все целые числа в xs, которые являются [x, y), т.е. между X и Y.

Я могу сделать:

(select #(and (>= % x) (< % y)) xs)

Но это неэффективно - O (n), когда это мог быть O (зарегистрируйте n), я ожидаю число элементов, возвращенное, чтобы быть маленьким. Используя взятие - в то время как и отбрасывание - в то время как позволил бы мне выйти, после того как я достиг y, но я все еще не могу перейти к x эффективно.

Я просто изучаю clojure, таким образом, вот то, как я сделал бы это в C++:

set<int>::iterator first = xs.lower_bound(x);
set<int>::iterator last = xs.lower_bound(y);
for (; first != last; ++first)
    // do something with *first

Я могу сделать это в clojure?

6
задан Greg Rogers 3 June 2010 в 05:02
поделиться

1 ответ

Упс! Я пропустил функцию subseq, на нее нет ссылки со страницы структур данных в документации.

(subseq xs >= x < y)
8
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

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