2017-02-13 36 views
1

所以我有一个哈希的名称初始化,我想获得用户输入以从哈希中删除密钥对。这里是我的代码:从哈希(红宝石)中删除密钥对实际上没有区别

group = {:sally => "Sally Samsonite", :johnny => "Johnny Jameson", :beth => "Beth Benitsky", :corinne => "Corinne Camelia"} 

    print "Please enter a name to remove #{group.keys} >" 
    group.except!(gets) 
    group.each do |key, value| 
     puts "#{value}" 
    end 

运行程序,并输入后“:萨利”的散列返回其原始:

Please enter a name to remove [:sally, :johnny, :beth, :corinne] >:sally 
Sally Samsonite 
Johnny Jameson 
Beth Benitsky 
Corinne Camelia 

如何永久删除元素?

回答

2

gets在结尾处返回带有换行符的字符串。

您的钥匙是符号。没有键名为":sally\n""sally\n",因此删除它并不会改变散列中的任何内容。

您需要:

  • 删除换行符与chomp
  • 如果存在
  • 去掉前缀:转换为符号

group = {:sally => "Sally Samsonite", :johnny => "Johnny Jameson", :beth => "Beth Benitsky", :corinne => "Corinne Camelia"} 

print "Please enter a name to remove #{group.keys} >" 
group.delete(gets.chomp.sub(/^:/,'').to_sym) 
group.each do |key, value| 
    puts "#{value}" 
end 
+0

使用“得到。 chomp.to_sym'仍然不会删除我通过终端输入的键值。 编辑:通过使用“gets.parameterize.to_sym”修复它 –

+0

@SamLim:更新。此代码现在与“sally”和“:sally”一起作为输入。 –

+0

@MarkoAvlijaš1)我为什么要? :) 2)回答你的问题 - 不,我没有。 –