2010-03-27 7 views
5

नमस्ते!एक सरणी को असाइन करें और उभरा नील मानों को प्रतिस्थापित करें

निम्न में से किसी एक सरणी के लिए मान निर्दिष्ट करते समय, मैं nil को 0 से कैसे बदल सकता हूं?

array = [1,2,3] 
array[10] = 2 
array # => [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, 2] 

असाइन करते समय संभव नहीं है, तो मैं इसे बाद में सबसे अच्छा तरीका कैसे करूं? मैंने array.map { |e| e.nil? ? 0 : e } के बारे में सोचा, लेकिन अच्छी तरह से ...

धन्यवाद!

+0

चूंकि मुझे कोई झूठा मूल्य नहीं मिल रहा है, इसलिए 'मानचित्र' विकल्प पर्याप्त प्रतीत होता है। और हाँ, गन्दा वास्तव में गन्दा है। :) आपकी मदद के लिए धन्यवाद! – Tobias

उत्तर

5

किसी सरणी में nil को प्रतिस्थापित करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है, इसलिए हाँ, map जाने का तरीका है। तो एक छोटा संस्करण आप खुश हो जाएगा, तुम कर सकते हो:

array.map {|e| e ? e : 0} 
1

जगह

array.map!{|x|x ?x:0} 

में सरणी को बदलने के लिए सरणी false शामिल कर सकते हैं, तो आप इस बजाय

का उपयोग करना होगा
array.map!{|x|x.nil? ? 0:x} 
12

असाइनमेंट के बाद सरणी बदलने के लिए:

array.map! { |x| x || 0 } 

ध्यान दें कि यह false से 0 को भी परिवर्तित करता है।

आप काम के दौरान शून्य उपयोग करना चाहते हैं, यह एक छोटे गंदा है:

i = 10 
a = [1, 2, 3] 
a += ([0] * (i - a.size)) << 2 
# => [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 2] 
0

एक और दृष्टिकोण सरणी के लिए एक मूल्य को जोड़ने के लिए अपने स्वयं के समारोह को परिभाषित करने के लिए होगा।

class Array 
    def addpad(index,newval) 
    concat(Array.new(index-size,0)) if index > size 
    self[index] = newval 
    end 
end 

a = [1,2,3] 
a.addpad(10,2) 
a => [1,2,3,0,0,0,0,0,0,0,2] 
1
a.select { |i| i } 

इस उत्तर बहुत छोटा तो मैं कुछ और शब्द द्वारा जोड़ा जा रहा है।

+1

आप इस सुविधा के लिए a.compact का उपयोग कर सकते हैं जो आप कर रहे हैं – sachin

1

nil.to_i 0 है, यदि सभी संख्याएं पूर्णांक हैं तो नीचे काम करना चाहिए। मुझे लगता है कि यह यहां सबसे छोटा जवाब भी है।

array.map!(&:to_i) 
संबंधित मुद्दे