2010-06-03 10 views
6

Angenommen, ich habe eine sortierte Menge von Ganzzahlen, xs, und ich möchte alle Ganzzahlen in xs abfragen, die [x, y) sind, dh. zwischen x und y.Wie bekomme ich die Reihenfolge der Zahlen in einer sortierten Menge, die zwischen zwei ganzen Zahlen in clojure liegen?

ich tun kann:

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

Aber das ist ineffizient - O (n), wenn es O (log n) sein könnte, erwarte ich, dass die Anzahl der Elemente klein sein zurückgegeben. Wenn ich take-while und drop-while benutze, würde ich mich beenden, sobald ich y erreicht habe, aber ich kann immer noch nicht effizient zu x springen.

ich clojure gerade lerne so hier ist, wie ich es in C++ tun würde:

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

Kann ich das in Clojure?

Antwort

8

Hoppla! Ich habe die subseq Funktion verpasst, es gibt keine Verbindung zu ihr von der Datenstrukturseite der Dokumentation.

(subseq xs >= x < y) 
Verwandte Themen