这是我第一次使用Ruby,我需要使用一个包含三个10位数电话号码的数组,并让程序给我一个总和最大的电话号码。
my_array =(['123-456-7777','963-481-7945','111-222-3333'])
我不知道从哪里开始。
请帮忙!
我目前正在使用Ruby进行codeacademy课程。但到目前为止,我还不太了解这个问题。
我想过要开始 my_array =(['123-456-7777','963-481-7945','111-222-3333']) my_array [2]
这会给我想要的答案 => “963-481-7945”
但我知道这不是要走的路。
我在考虑为每个值执行求和,然后将其设置为我想要显示的数字集,但我不确定如何设置它。
答案 0 :(得分:0)
解决方案是这样的:
my_array = (['123-456-7777', '963-481-7945', '111-222-3333'])
highest_sum = 0
highest_phone_number = 0
my_array.each do |phone_number|
sum = phone_number.gsub('-', '').split('').map(&:to_i).reduce(&:+)
if sum > highest_sum
highest_sum = sum
highest_phone_number = phone_number
end
end
puts highest_phone_number
#=> 963-481-7945
您查看电话号码字符串(my_array)中的每个字符串,并获取每个电话号码字符串的总和。您可以通过将短划线(' - ')替换为任何内容(''),将电话号码字符串拆分为数字,将每个数字映射为整数,然后对数字。获得电话号码的总和后,检查它是否大于当前的最高音量。如果是,请将highest_sum设置为该总和,将highest_phone_number设置为当前电话号码。在您通过所有电话号码字符串循环后,只输出highest_phone_number。
答案 1 :(得分:0)
这是我的解决方案:
my_array = (['123-456-7777', '963-481-7945', '111-222-3333', '222-111-3333'])
sum_arr = []
sum_hash = {}
my_array.each do |s|
sum = s.gsub("-","").split(//).inject(0) {|z, x| z + x.to_i}
puts sum
sum_hash[sum] = sum_hash[sum] ? sum_hash[sum] << s : [s]
puts sum_hash.inspect
end
puts sum_hash.max_by { |k,v| k }
我的部分解决方案来自:http://rosettacode.org/wiki/Sum_digits_of_an_integer
注意:在我写答案的过程中,问题发生了变化:(