2014-09-05 4 views
6

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

वर्तमान में, मैं यह कर:

v = [1, 2, 3, 5] #example list 
x = 4 #value to insert 
index = searchsortedfirst(v, x) #find index at which to insert x 
insert!(v, index, x) #insert x at index 

बोनस प्रश्न: क्या होगा यदि मैं एक साथ कोई डुप्लिकेट सुनिश्चित करने के लिए करना चाहते हैं?

उत्तर

5

आप searchsorted उपयोग कर सकते हैं सूचकांकों की सीमा जहां मूल्य के बजाय सिर्फ पहले एक का होता है पाने के लिए और उसके बाद splice! का उपयोग मूल्यों का एक नया सेट के साथ उस श्रेणी में मूल्यों को बदलने के लिए:

insert_and_dedup!(v::Vector, x) = (splice!(v, searchsorted(v,x), [x]); v) 

है कि एक अच्छा छोटा एक-लाइनर जो आप चाहते हैं।

julia> v = [1, 2, 3, 3, 5]; 

julia> insert_and_dedup!(v, 4) 
6-element Array{Int64,1}: 
1 
2 
3 
3 
4 
5 

julia> insert_and_dedup!(v, 3) 
5-element Array{Int64,1}: 
1 
2 
3 
4 
5 

यह मैं लगता है कि इस मामले में जहां splice! प्रतिस्थापन किसी एकल मान के बजाय एक सरणी है संभाल चाहिए बनाया, तो मैं उस सुविधा जोड़ सकते हैं।

+0

धन्यवाद, यह बहुत साफ है। –

+0

मैंने splice बदल दिया है! प्रतिस्थापन तर्क को कुछ भी समझा जा सकता है, जिसमें स्केलर मान शामिल हैं: https://github.com/JuliaLang/julia/commit/e048f2bf1b8da56b07738c0a4d142cd29e140e98। अब आप 'insert_and_dedup को परिभाषित कर सकते हैं! (V :: वेक्टर, एक्स) = (splice! (V, searchsorted (v, x), x); v) इसके बजाए। – StefanKarpinski

+1

धन्यवाद, और जुलिए पर आपके सभी कामों के लिए भी धन्यवाद। मैं भाषा से प्यार कर रहा हूँ। –

संबंधित मुद्दे