2009-06-17 9 views
8

में दो अनुक्रमों से मूल्यों के प्रसंस्करण जोड़े मैं क्लोजर समुदाय में प्रवेश करने की कोशिश कर रहा हूं। मैं पाइथन के साथ बहुत कुछ कर रहा हूं, और सुविधाओं में से एक को पुन: सक्रिय करने के लिए, ज़िप() विधि का व्यापक उपयोग करने वाली सुविधाओं में से एक है। क्या क्लोजर में इसे प्राप्त करने का एक (चालाक और छोटा) तरीका है?क्लोजर

उत्तर

12

एक और तरीका है बस मानचित्र इस तरह, कुछ समारोह है कि एक दृश्य में अपने तर्कों एकत्र करता है के साथ एक साथ उपयोग करने के लिए है:

user=> (map vector '(1 2 3) "abc") 
([1 \a] [2 \b] [3 \c]) 
+0

यह उदाहरण तीन अनुक्रमों को संभालने में सक्षम था, धन्यवाद। – Thomas

4
(zipmap [:a :b :c] (range 3)) 
-> {:c 2, :b 1, :a 0} 

मानचित्रों पर इटरेटिंग जोड़ों के साथ होता है, उदा। इस तरह:

(doseq [[k v] (zipmap [:a :b :c] (range 3))] 
    (printf "key: %s, value: %s\n" k v)) 

प्रिंट:

key: :c, value: 2 
key: :b, value: 1 
key: :a, value: 0 
+0

मैंने दृष्टिकोण का परीक्षण किया, और यह तीन या अधिक अनुक्रमों को संभाल नहीं सकता था। मुझे उस प्रारंभिक प्रश्न में माफी चाहिए, माफ करना चाहिए। – Thomas

3

सवाल का उत्तर दिया गया है, लेकिन अभी भी interleave है, जो अनुक्रमों की मनमानी संख्या को भी संभालता है, लेकिन परिणामी अनुक्रम को टुपल्स में समूहित नहीं करता है (लेकिन आप partition का उपयोग वें के लिए कर सकते हैं पर)।