Как получить последовательность чисел в отсортированном множестве, которые находятся между двумя целыми числами в clojure? - PullRequest
6 голосов
/ 03 июня 2010

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

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

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

Но это неэффективно - O (n), когда это может быть O (log n), я ожидаю, что количество возвращаемых элементов будет небольшим. Использование take-while и drop-while позволило бы мне выйти, как только я достиг 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

Могу ли я сделать это в ближайшем будущем?

1 Ответ

8 голосов
/ 03 июня 2010

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

(subseq xs >= x < y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...