これを行うには多くの方法があります。ここに別のものがあります:
time1 = "10min 43s"
time2 = "32min 30s"
def get_mins_and_secs(time_str)
time_str.scan(/\d+/).map(&:to_i)
#=> [10, 43] for time_str = time1, [32, 30] for time_str = time2
end
min, sec = get_mins_and_secs(time1)
min2, sec2 = get_mins_and_secs(time2)
min += min2
sec += sec2
if sec > 59
min += 1
sec -= 60
end
puts "#{min}min #{sec}sec"
ここで何が起こっているか考えてみましょう。まず、時間文字列から分と秒を抽出する必要があります。私はそれを行う方法を作りました:
def get_mins_and_secs(time_str)
time_str.scan(/\d+/).map(&:to_i)
#=> [10, 43] for time_str = time1, [32, 30] for time_str = time2
end
2 つの数値を文字列として抽出するメソッドtime_str = "10min 43s",
を適用します。String@scan
"10min 43s".scan(/\d+/) # => ["10", "43"]
Array#map
次に、これら2つの文字列を整数に変換するために使用されます
["10", "43"].map {|e| e.to_i} # => [10, 43]
これは次のようにもっと簡潔に書くことができます。
["10", "43"].map(&:to_i} # => [10, 43]
にチェーンmap
することによりscan
、取得します
"10min 43s".scan(/\d+/).map(&:to_i} # => [10, 43]
配列は、変数and[10, 43]
によって返され、受信 (分解) されます。min
sec
min, sec = get_mins_and_secs(time_str)
残りは簡単です。