【发布时间】:2019-06-20 21:34:18
【问题描述】:
我有一个类似这样的哈希数组:
rules = [{
"id" => "artist_name",
"type" => "string",
"field" => "artist_name",
"input" => "text",
"value" => "Underoath",
"operator" => "contains"
},
{
"id" => "bpm",
"type" => "integer",
"field" => "bpm",
"input" => "number",
"value" => 100,
"operator" => "greater"
}]
我正在运行find 来选择我想要的哈希:
rules.find {|h| h['id'] == 'artist_name'}
但我需要为几十个不同的“规则”执行此操作,这感觉有点冗长。
也许它实际上是获取特定“规则”的最有效方法,但我的直觉是有一种 Ruby 方法可能会做得更好。
如果我只需要编写自己的方法,那很好,但想看看有没有我不熟悉的方法。
那么,有没有办法以更紧凑/高效的方式编写rules.find {|h| h['id'] == 'artist_name'}?
【问题讨论】:
-
您是否要求更快的算法来查找元素?如果您多次调用此方法,则创建一个新的数据结构以加快搜索速度可能是有利的
-
您可以使用
index_by,但它只会在您为同一个键查找多个值时提高性能,例如rules.index_by { |x| x["id"] }.values_at "bpm", "artist_name"的性能优于["bpm", "artist_name"].map { |id| rules.find { |x| x["id"] == id } } -
如果您要定期搜索记录,您应该考虑使用数据库。
-
@max,我的人告诉我
index_by是 Rails 方法。 (没有 Rails 标记。) -
我总是忘记这一点