这是一个哈希:
hash = {"<start>"=>[["<intro>"]],
"<intro> "=>[["<FirstSentence>", "<Funnel>", "<Thesis>"]],
"<FirstSentence> "=>[["<StartingClause>", "<Group>", "<PastAction>", "."], ["<Quotation>", "--", "<Author>", "<QuoteEnd>", "<QuoteTransition>", "."]]}
key[1]
和key[2]
此处>
后面有一个空格。我想删除它。我尝试了tr(' ', '')
,delete(' ')
,strip
,gsub
等。
hash.each do |key, _|
key.delete(' ')
end
但他们不起作用。白色空间不受所有修剪/删除方法的影响。我是以错误的方式使用该方法吗?
答案 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不会修改接收者。串#删除!确实