रूबी: एक सरणी के केवल हिस्से का बदलते प्रकार - रूबी

मेरे पास सरणी का पूरा गुच्छा है, प्रत्येक के साथस्लॉट्स 1 और 3 से 9 तक तारों के रूप में पूर्णांक, लेकिन प्रत्येक सरणी स्लॉट 2 में इसमें एक समय होता है (एक स्ट्रिंग के रूप में), मिनटों में: सेकंड। एक नमूना सरणी इस तरह दिखेगी:

["1", "11:49", "345", "26", "123456", "23", "1", "0", "65"]

मैं जो करना चाहता हूं वह समय को पूर्णांक में छोड़कर सबकुछ परिवर्तित कर देता है, और समय को सेकंड की पूर्णांक संख्या में परिवर्तित करता है। मैं इसे किस तरह लूं?

उत्तर:

जवाब के लिए 2 № 1
["1", "11:49", "345", "26", "123456", "23", "1", "0", "65"]
.map.with_index do |e, i|
if i == 1
m, s = e.scan(/d+/)
m.to_i.*(60) + s.to_i
else
e.to_i
end
end

उत्तर № 2 के लिए 1

एक धीमी लेकिन संभवतः अधिक पठनीय संस्करण आपके मूल सरणी के क्लोन का दूसरा तत्व सेट करता है, फिर मानचित्र करता है to_i विधि

>> original = ["1", "11:49", "345", "26", "123456", "23", "1", "0", "65"]

>> a = original.clone
=> ["1", "11:49", "345", "26", "123456", "23", "1", "0", "65"]
>>  m, s = a[1].split(":")
=> ["11", "49"]
>>  a[1] = m.to_i * 60 + s.to_i
=> 709
>> a.map(&:to_i)
=> [1, 709, 345, 26, 123456, 23, 1, 0, 65]

एक समारोह में:

def f(array)
a = array.clone
m, s = a[1].split(":")
a[1] = m.to_i * 60 + s.to_i
a.map(&:to_i)
end

जवाब के लिए 0 № 3

मैं इसे इस तरह करूँगा:

time_to_seconds = -> x {m,s=x.split(":").map(&:to_i);m*60+s}

my_array.map do |num|
num[":"] ? time_to_seconds[num] : num.to_i
end

संबंधित सवाल
सबसे लोकप्रिय