如何修剪哈希键中的所有空格?

时间:2017-10-31 04:49:35

标签: ruby

这是一个哈希:

hash = {"<start>"=>[["<intro>"]],
        "<intro> "=>[["<FirstSentence>", "<Funnel>", "<Thesis>"]],
        "<FirstSentence> "=>[["<StartingClause>", "<Group>", "<PastAction>", "."], ["<Quotation>", "--", "<Author>", "<QuoteEnd>", "<QuoteTransition>", "."]]}

key[1]key[2]此处>后面有一个空格。我想删除它。我尝试了tr(' ', '')delete(' ')stripgsub等。

hash.each do |key, _|
  key.delete(' ')
end

但他们不起作用。白色空间不受所有修剪/删除方法的影响。我是以错误的方式使用该方法吗?

4 个答案:

答案 0 :(得分:3)

hash.map { |k, v| [k.strip, v] }.to_h

答案 1 :(得分:2)

hash.each_with_object({}) { |(k,v),h| h[k.strip] = v }
  #=> {"<start>"=>[["<intro>"]],
  #    "<intro>"=>[["<FirstSentence>", "<Funnel>", "<Thesis>"]], 
  #    "<FirstSentence>"=>[["<StartingClause>", "<Group>", "<PastAction>", "."],
  #                        ["<Quotation>", "--", "<Author>", "<QuoteEnd>",
  #                         "<QuoteTransition>", "."]]}

答案 2 :(得分:1)

您正在使用的循环不起作用,因为您的代码基本上是从变量key中删除空格而不是散列本身。

我要做的是编写一个封装循环逻辑的函数,并返回一个修改了密钥的新哈希,如下所示:

def normalize_keys!(hash)   
  buffer = {}
  hash.each do |key, value|
    buffer[key.strip] = value
  end   
  buffer
end

new_hash = normalize_keys!(old_hash)

答案 3 :(得分:0)

要应用的方法是delete!,而不是delete。 String#delete不会修改接收者。串#删除!确实