如果可能,将所有哈希值应用于整数

时间:2014-06-13 02:36:02

标签: ruby

我希望获得buy_house_params,如果值为" 123"可以是123

如果值为abc,则将其保留为原始值。

buy_house_params.each { |key, value| buy_house_params[key]=value.to_i } 

但我仍然得到字符串类型整数

{"user_id"=>"", "age"=>"28", "gender"=>"male", "monthly_income"=>"48000"}

2 个答案:

答案 0 :(得分:0)

试试这个:

class String
  def is_number?
    true if Float(self) rescue false
  end
end

buy_house_params = {"user_id"=>"", "age"=>"28", "gender"=>"male", "monthly_income"=>"48000"}
buy_house_params.each{|k, v| buy_house_params[k] = v.to_i if v.is_number? }
=> {"user_id"=>"", "age"=>28, "gender"=>"male", "monthly_income"=>48000}

在将其转换为整数之前,它将测试每个hashmap值是否为数字。

答案 1 :(得分:0)

只有当字符串与所需格式匹配时,才能使用常规表达式解析字符串:引用的整数。

class String
    def is_i?
       !!(self =~ /\A[-+]?[0-9]+\z/)
    end
end

在这里回答:

Test if a string is basically an integer in quotes using Ruby?

或者您可以测试它是否为整数:

>> Integer "1"
=> 1
>> Integer "one"
ArgumentError: invalid value for Integer(): "one"

Ruby: checking if a string can be converted to an integer