给定一个字符串,例如"ABCD 100"
,将其转换为{"ABCD": 100}
的最有效方法是什么,其中"ABCD"
是键,100
是整数,价值?
答案 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)
假设您有多个键值对,可以合并split
,each_slice
和map
:
"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", {})