2014-10-16 6 views
6

में बदलें, मेरे पास अद्वितीय तत्वों वाला एक सरणी है। क्या इसके सूचकांक मूल्य का उपयोग किये बिना किसी अन्य मूल्य के साथ किसी निश्चित मान को प्रतिस्थापित करने का कोई तरीका है?एक एकल तत्व को एक सरणी

उदाहरण:

array = [1,2,3,4] 
if array.include? 4 
# "replace 4 with 'Z'" 
end 
array #=> [1,2,3,'Z'] 

hash = {"One" => [1,2,3,4]} 
if hash["One"].include? 4 
# "replace 4 with 'Z'" 
end 
hash #=> {"One" => [1,2,3,'Z']} 
+0

क्या आप कर रहे हैं यहां खोज रहे हैं: 'सरणी = [1,4,4]; अगर array.include? 4 # 'Z'' के साथ 4 को प्रतिस्थापित करें? –

+0

@CarySwoveland हां, मुझे बस अपनी पसंद के किसी अन्य तत्व के साथ 4 (ओं) को प्रतिस्थापित करने की आवश्यकता है। [1,4,4] => [1, 'जेड', 'जेड'] – Lasonic

+0

मैंने सोचा कि इस तरह के पहले उदाहरणों को प्रतिस्थापित किया जाना चाहिए क्योंकि शीर्षक "एकल तत्व" कहता है। लेकिन यह नहीं पता चला है। – sawa

उत्तर

12
p array.map { |x| x == 4 ? 'Z' : x } 

# => [1, 2, 3, 'Z'] 
+1

यदि पहला तत्व 4 बराबर है तो पूरे सरणी के माध्यम से क्यों जाना है? –

4

आप एक से अधिक है, तो आप Array#map

array = array.map do |e| 
    if e == 4 
    'Z' 
    else 
    e 
    end 
end 

उपयोग कर सकते हैं, बल्कि एक नई सरणी बनाने की तुलना में जगह में सरणी संपादित करने के लिए, Array#map!

का उपयोग जिस चीज को आप प्रतिस्थापित करना चाहते हैं, आप पुराने से नए मानचित्र के लिए हैश का उपयोग कर सकते हैं:

replacements = { 
    4 => 'Z', 
    5 => 'five', 
} 
array = array.map do |e| 
    replacements.fetch(e, e) 
end 

यह Hash#fetch की सुविधा का उपयोग करता है, जहां कुंजी नहीं मिली है, तो दूसरा तर्क डिफ़ॉल्ट के रूप में उपयोग किया जाता है।

+0

क्या होगा अगर मेरी सरणी हैश में अद्यतन की तरह है? – Lasonic

+1

@Lasonic फिर: 'हैश [' कुंजी ']। मानचित्र! करो | ई | ... अंत –

2

एक बहुत ही सरल समाधान है कि वहाँ कोई डुप्लिकेट हो जाएगा मान लिया गया है और क्रम मायने नहीं रखता कि:

hash = { 'One' => [1, 2, 3, 4] } 

hash['One'].instance_eval { push 'Z' if delete 4 } 
+1

क्या होगा यदि यह सरणी में अंतिम तत्व नहीं है? – Lasonic

+0

नीचे वोट का कारण क्या है? –

+1

मैं इसे इस तरह से नहीं करूँगा, लेकिन यह दिलचस्प है। शायद हमारे बीच में एक दुष्ट डाउनवॉटर है। –

5

आप के रूप में यह कर सकते हैं:

array[array.index(4)] = "Z" 

तत्व जरूरी नहीं है, तो सरणी में, तो

if i = array.index(4) 
    array[i] = "Z" 
end 
+0

उन्होंने कहा कि वह आइटम के सूचकांक मूल्य का उपयोग नहीं करना चाहता था। –

+2

जबकि मैं आपसे सहमत हूं, मुझे लगता है कि आपकी टिप्पणी थोड़ा कठोर है। –

+0

@MarkThomas शायद। लेकिन मुझे संदेह है कि पोस्ट डाउनवोट के साथ था, जिसने इसे और भी खराब कर दिया। – sawa

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