2017-02-13 1 views
1

Итак, у меня есть инициализированный хэш имен, и я пытаюсь получить пользовательский ввод, чтобы удалить пару ключей из хэша. Вот мой код:Удаление keypair из hash (Ruby) на самом деле не имеет значения

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 'до сих пор не удаляет ввод ключа I через терминал. Редактировать: Исправлено с помощью «gets.parameterize.to_sym» –

+0

@SamLim: Обновлено. Этот код теперь работает с «sally» и «: sally» в качестве входных данных. –

+0

@ MarkoAvlijaš 1) почему я? :) 2) Отвечая на ваш вопрос - нет, я этого не сделал. –

Смежные вопросы