Partitioning in clojure with a lazy collection of strings -
तारों के संग्रह से शुरू करना जैसे:
(def str-coll ["abcd "Efgh" "jklm"])
लक्ष्य स्ट्रिंग संग्रह के सिर से विशिष्ट वर्णों की संख्या को निकालने के लिए है, स्ट्रिंग का एक विभाजन समूह बनाना। यह वांछित व्यवहार है:
('का उपयोग करें' [clojure.contrib.str-utils2: केवल (शामिल होने के लिए)]) (विभाजन-सभी 3 ("str-coll में शामिल हों") (( \ A \ b \ c) (\ d \ e \ f) (\ g \ h \ j) (\ k \ l \ m))
हालांकि, पूरे संग्रह, जो स्ट्रिंग्स के बहुत बड़े संग्रह के साथ काम करते समय स्मृति समस्याओं का कारण बनता है। मेरा विशिष्ट उपयोग केस सीमांकित रिकॉर्ड की एक बड़ी फ़ाइल को पार्स करने से उत्पन्न आलसी संग्रह से तारों के सबसेट उत्पन्न कर रहा है:
(defn file-coll [in-file] (- & gt; & gt; ( लाइन-सीक (रीडर इन-फाइल)) (विभाजन-द्वारा # (.प्रारंभ के साथ ^ स्ट्रिंग% "& gt;")) (विभाजन 2))))
और काम पर बना रहा है से मैंने कम करने, विभाजन और शामिल होने के संयोजनों की कोशिश की है, लेकिन पहले तार के सिर से पात्रों को खींचने के लिए सही भरोसे के साथ नहीं आ सकता है और आवश्यकतानुसार अगले तारों का मूल्यांकन करने के लिए आज़ादी से मूल्यांकन कर सकता है। किसी भी विचार या संकेत के लिए बहुत बहुत धन्यवाद।
निश्चित रूप से आप क्या चाहते हैं, लेकिन निम्नलिखित
उपयोगकर्ता => (def str-coll ["abcd" "efgh" "क्या आप पहले उदाहरण करते हैं, और इतनी धीमी गति से करते हैं।Jklm "]) # उपयोगकर्ता / str- coll उपयोगकर्ता => (नक्शा seq str-coll) ((\ a \ b \ c \ d) (\ e \ f \ g \ h) (\ j \ k \ l \ M)) उपयोगकर्ता => (समतल * 1) (\ a \ b \ c \ d \ e \ f \ g \ h \ j \ k \ l \ m) user => (विभाजन 3 * 1) ((\ a \ B \ c) (\ d \ e \ f) (\ g \ h \ j) (\ k \ l \ m))
सभी एक साथ अब:
(- >> स्ट्रिंग-कॉल (मैप सीक) फ्लैटन (विभाजन 3))
Comments
Post a Comment