如何将字符串中的数字转换为哈希值

时间:2017-11-05 12:00:36

标签: ruby string hash

给定一个字符串,例如"ABCD 100",将其转换为{"ABCD": 100}的最有效方法是什么,其中"ABCD"是键,100是整数,价值?

3 个答案:

答案 0 :(得分:2)

如果这是我要做的确切格式

key, value = "ABCD 100".split
{key.to_sym => value.to_i}

如果您正在寻找单行

自ruby 2.4.0

["ABCD 100".split].to_h.each_with_object({}) { |(k, v), memo| memo[k.to_sym] = v.to_i }

来自ruby 2.4.0

["ABCD 100".split].to_h.transform_values!(&:to_i)

答案 1 :(得分:2)

假设您有多个键值对,可以合并spliteach_slicemap

"ABCD 100 EFG 200".split
                  .each_slice(2)
                  .map {|k, v| [k.to_sym, v.to_i]}.to_h
#=> {:ABCD=>100, :EFG=>200}

scan和群组:

"ABCD 100 EFG 200".scan(/([A-Z]+)\s([0-9]+)/)
                  .map! {|k, v| [k.to_sym, v.to_i]}.to_h
#=> {:ABCD=>100, :EFG=>200}

根据您的实际问题使用正则表达式,它只是一个实例。

答案 2 :(得分:0)

如果您的模式是字符串“key value”,则可以使用String#split。它接受一个字符串并返回由分隔符分隔的子字符串数组。如果您不提供分隔符,则默认值为空格。

def insert_values_from_string_into_hash(to_be_parsed_string, hash)
  string_key, value = to_be_parsed_string.split
  hash[string_key] = value
  hash
end   

insert_values_from_string_into_hash("ABCD 100", {})