Ruby中的优雅方法,可以找到第一个可能匹配的哈希键

时间:2015-12-04 20:18:12

标签: ruby ruby-on-rails-4 ruby-2.2

假设我有用户输入,可以是:

input = { user_id: 5, ... }

或者这个:

input = { app_id: 5, ... }

我想要返回:user_id或:app_id,具体取决于提供的内容。我可以这样做:

(input.keys & [:user_id, :app_id]).first

是否有更优雅,更红宝石,惯用的方法呢?

这比上面更好还是更差?:

input.slice(:user_id, :app_id).keys.first

(答案不需要严格来自Ruby 2.2 stdlib,Rails方法也欢迎)

3 个答案:

答案 0 :(得分:4)

我会使用findhas_key?来解决它:

[:user_id, :app_id].find { |k| input.has_key?(k) }

答案 1 :(得分:1)

你的解决方案已经足够好了。我更喜欢的另一种选择:

input = { app_id: 5, ... }

KEYS = [:app_id, :user_id, :foo_id]

input.find { |key, value| KEYS.include? key }

通过这种方式,您可以将所需的what与您想要的how分开。您甚至可以从文件中分配KEYS,这样您甚至不必打开代码来添加或删除查找中的键。但那可能是过度工程。

我会为KEYS艰难寻找一个更好的名字。命名很难。

答案 2 :(得分:1)

为什么不呢:

input.key?(:user_id) ? :user_id : :app_id

?我错过了什么吗?