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



这是一个哈希:

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

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

hash.map { |k, v| [k.strip, v] }.to_h
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>", "."]]}

您使用的循环不起作用,因为您的代码实质上是从变量key中删除空格,而不是哈希本身。

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

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

应用方法是delete!,而不是delete。字符串#删除不会修改接收器。字符串#删除!确实如此。

最新更新