Рубиновые ключи мешанины ко множеству, условному на значении хэш-функции

Я хотел бы извлечь значения ключа мешанины ко множеству, когда условие соблюдают. Например, с мешаниной h я хочу извлечь ключи, где ценности "верны":

h = { :a => true, :b => false, :c =>true }

Я придумал это:

h.map {|k,v| k if v==true} - [nil]

Какие-либо альтернативы?

2
nl ja de
@sbagdat, чтобы быть точными, , карта и собирает , являются псевдонимами, не , избранным . выбрать делает различную работу, и в случае Мешанины возвращает другой тип: это возвращает Мешанину, в то время как наносят на карту/собирают возвращаемый массив.
добавлено автор NIA, источник
нанесите на карту и избранные методы - псевдонимы, таким образом, можно использовать одного из них.
добавлено автор sbagdat, источник
жаль, моя ошибка.
добавлено автор sbagdat, источник

2 ответы

h.select { |_, v| v }.keys

Сделает то же самое, но более удобочитаемым способом.

10
добавлено
Почему нет? Также это - более общий случай, поскольку он позволит все "истинные" ценности, не только , верный (в Руби, как в Схеме, чем-либо кроме , ноль и , ложный , верен в условии, но 1! = верный ).
добавлено автор Hauleth, источник
It' s умный путь, но я не уверен, что это - "более удобочитаемый путь".
добавлено автор Drazen Mokic, источник
ключи возвращает Множество . Что еще это возвратило бы?
добавлено автор Jörg W Mittag, источник
That' s хороший, спасибо. Однако, чтобы возвратить множество необходимо использовать to_a.
добавлено автор DavB, источник
@Joerg. Да, моя ошибка. Спасибо.
добавлено автор DavB, источник

Можно также сделать

s = {}
h.each do |k,v|
   s[k] = v if v==true
end
0
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков