ruby-on-rails - 检查可能是单个字符串或字符串数​​组的散列值的方法

标签 ruby-on-rails ruby

我有一个散列,其中包含诸如...的值

    EXAMPLE = {
      "101" => "SO01",
      "102" => "SO02",
      "103" => "SO03",
      "105" => %w(S005 SO04)
    }

我想在散列中搜索 SO04 并返回“105”,或者“SO03”并返回“103”。我敢肯定有一个很好的方法可以做到这一点,但目前我已经忘记了。我一直只是简单地使用 EXAMPLE.key() 但现在我意识到那里有数组,这不会削减它。

最佳答案

试试这个:

>> EXAMPLE = {"101" => "SO01",
              "102" => "SO02",
              "103" => "SO03",
              "105" => %w(SO05 SO04)}
>> EXAMPLE.find { |_,v| Array(v).include?('SO02') }.try(:first)
=> "102"
>> EXAMPLE.find { |_,v| Array(v).include?('SO05') }.try(:first)
=> "105"
>> EXAMPLE.find { |_,v| Array(v).include?('SO06') }.try(:first)
=> nil

.first 最后是必需的,因为 #find 返回一个 [key, value] 的数组。

如果您使用的是 Ruby 2.3 或更高版本,则可以使用安全导航运算符代替 try:

>> EXAMPLE.find { |_,v| Array(v).include?('SO05') }&.first
=> "105"
>> EXAMPLE.find { |_,v| Array(v).include?('SO06') }&.first
=> nil

关于ruby-on-rails - 检查可能是单个字符串或字符串数​​组的散列值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290232/

相关文章:

ruby-on-rails - 设计从 1.1.5 升级到 1.4.5 会导致错误数量的参数错误

ruby-on-rails - rails : how to test before_save callbacks

jquery - 如何使用 JQuery 将数据放入 Rails

ruby-on-rails - object_id 方法与 Fixnum 对象和 String 对象的区别

ruby-on-rails - ActionController::RoutingError(没有路由匹配 [GET] "/assets/blah.png") Heroku

ruby - 在 ruby​​ 的当前终端中运行命令,然后在退出时执行代码

mysql - 有趣的 Rails 协会挑战赛

mysql - rails : read integer from tinyint

ruby 超时和系统命令

ruby-on-rails - rails 3.1 分贝 :test:prepare and "pending migrations" problem