2016-03-30 10 views
5

क्या जूलिया में कोई फ़ंक्शन है जो आर paste() फ़ंक्शन जैसा व्यवहार करता है? विशेष रूप से, यदि हम दो वैक्टरों को फ़ंक्शन देते हैं, तो यह दो इनपुट वैक्टरों के तत्व-वार संयोजन के साथ एक एकल वेक्टर लौटाएगा।जूलिया आर के पेस्ट के बराबर() फ़ंक्शन

मैंने चारों ओर देखा है और दस्तावेज़ों में या अन्यथा इसका उत्तर नहीं ढूंढ रहा है। जॉन माइल्स व्हाइट द्वारा An older post बताता है कि जूलिया के join() फ़ंक्शन निकटतम एनालॉग है, लेकिन ऐसा लगता है कि तारों के वैक्टरों पर तत्व-वार नहीं, बल्कि स्ट्रिंग के जोड़े पर ही काम करता है।

अभी के लिए, मैं नीचे दिए गए फ़ंक्शन का उपयोग कर रहा हूं जो join() पर कॉल करने वाले तत्वों पर लूप है, लेकिन मुझे आश्चर्य है कि कोई बेहतर दृष्टिकोण है या नहीं।

x = ["aa", "bb", "cc"] 
y = ["dd", "ee", "ff"] 

function mypaste(v1, v2) 
    n = length(v1) 
    res = Array{ASCIIString}(n) 
    for i = 1:n 
     res[i] = join([v1[i], v2[i]]) 
    end 
    return res 
end 

mypaste(x, y) 

mypaste() चल रहा है वांछित के रूप में हमें नीचे आउटपुट देता है।

3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 

क्या कोई अच्छा विकल्प है? क्या मैं join() फ़ंक्शन को गलत समझ रहा हूं?

उत्तर

8

मुझे नहीं लगता कि मैं बिल्कुल भी join का उपयोग करेंगे है (सूची समझ के लिए @DSM जवाब देखें)। जुड़ें एक संग्रह के भीतर तारों को गठबंधन करने के लिए प्रयोग किया जाता है; आप दो अलग-अलग संग्रहों में तारों के संयोजन के बाद हैं। इसलिए जब यह अस्थायी संग्रह आप zip साथ join के लिए की जरूरत बनाने के लिए आसान (और कुशल) है, तो आप इसे string समारोह या गुणन का उपयोग करके बच सकते हैं:

julia> map(string, x, y) 
3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 

julia> map(*, x, y) 
3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 

और भी बेहतर (लेकिन शायद भी आधे से चालाक), प्रसारण तत्व-वार गुणा ऑपरेटर .*:

julia> x .* y 
3-element Array{ASCIIString,1}: 
"aadd" 
"bbee" 
"ccff" 
4

आप जोड़े प्राप्त करने के लिए एक सूची समझ और zip इस्तेमाल कर सकते हैं:

julia> x = ["aa", "bb", "cc"]; 

julia> y = ["dd", "ee", "ff"]; 

julia> [join(i) for i=zip(x,y)] 
3-element Array{ByteString,1}: 
"aadd" 
"bbee" 
"ccff" 
4

map इस्तेमाल किया जा सकता। एक लाइनर map(join,zip(x,y)) है। निम्न उदाहरण है, जो भी z कहते हैं के रूप में:

julia> x = ["aa","bb","cc"]; 

julia> y = ["dd","ee","ff"]; 

julia> z = ["gg","hh","ii"]; 

julia> map(join,zip(x,y,z)) 
3-element Array{Any,1}: 
"aaddgg" 
"bbeehh" 
"ccffii" 

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