Ruby - 将字符串转换为哈希键

时间:2014-09-28 21:30:09

标签: ruby string sqlite hash

例如,我有字符串“The Dark Knight 10.0”,我需要将其转换为表格的键值哈希:

黑暗骑士=> 10.0

如何创建一个块来将我从.db文件中获取的此表单的所有字符串转换为上述表单的键值哈希值?

感谢您的帮助!

3 个答案:

答案 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"