2017-02-13 71 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)回答你的問題 - 不,我沒有。 –