例如,我有字符串“The Dark Knight 10.0”,我需要将其转换为表格的键值哈希:
黑暗骑士=> 10.0
如何创建一个块来将我从.db文件中获取的此表单的所有字符串转换为上述表单的键值哈希值?
感谢您的帮助!
答案 0 :(得分:1)
您需要一个正则表达式来隔离电影的名称和评级(如果10.0是评级)。我需要更多的输入以提供更准确的正则表达式,但对于上面的一个,这可以完成工作(如果电影,也就是说,变形金刚2 9.0,它会正确地采取变形金刚2) => 9.0):
def convert_string_into_key_value_and_add_to_hash(string, hash_to_add_to)
name = string[/^[\w .]+(?=\s+\d+\.\d+$)/]
number = string[/\d+\.\d+$/].to_f
hash_to_add_to[name] = number
end
str = "The Dark Knight 10.0"
hash = {}
convert_string_into_key_value_and_add_to_hash(str, hash)
p hash #=> {"The Dark Knight"=>10.0}
更多的Rubyist'方法是使用rpartition:
def convert_string_into_key_value_and_add_to_hash(string, hash_to_add_to)
p partition = string.rpartition(' ')
hash_to_add_to[partition.first] = partition.last.to_f
end
str = "The Dark Knight 2 10.0"
hash = {}
convert_string_into_key_value_and_add_to_hash(str, hash)
p hash #=> {"The Dark Knight 2"=>10.0}
答案 1 :(得分:0)
假设你已经拥有了一个集合中的字符串,迭代它们(1),用最后一个空格(2)分割,并将结果放入一个哈希中,使用这两个部分作为键/值。
(1)参见'每个'方法
(2)参见' rpartition'方法(例如:https://stackoverflow.com/a/20281590/1583220)
希望它有所帮助。
答案 2 :(得分:0)
如果您将文件读入数组,则数组中的每个元素都是文件中的一行,您将具有以下内容:
arr = ["The Dark Knight 10.0", "The White Knight 9.4", "The Green Knight 8.1"]
有很多方法可以将每个字符串分成两部分,用于散列中的键和值。这是一种方式:
arr.each_with_object({}) do |str,h|
key, value = str.split(/\s(?=\d)/)
h[key] = value
end
#=> {"The Dark Knight"=>"10.0",
# "The White Knight"=>"9.4",
# "The Green Knight"=>"8.1"}
此正则表达式中的(?=\d)
称为"positive lookahead"。