在 Ruby 中搜索数组的更好方法?

Better way to search array in Ruby?

我有一个哈希数组:

arr = [{"id"=>"1", "name"=>"Alan"}, {"id"=>"2", "name"=>"Ben"}, {"id"=>"3", "name"=>"Carl"}, {"id"=>"4", "name"=>"Danny"}, {"id"=>"5", "name"=>"Eva"}]

如果我要找到 id #4 的名字:

arr.find{ |a| a["id"] == "4" }["name"]

returns"Danny",这就是我想要的

我的问题是,是否有更短、更优雅的方式来完成相同的搜索?

这是一种非常合理的做法。我看到的唯一问题是您的数据结构不是查找友好的。您需要在数组中搜索,而不是通过散列中的 ID 查找。在数组中搜索是 O(N) 并且是相对更难的代码。在哈希中查找是 O(1) 并且根本没有代码。

所以,我会将您的数组转换为散列,然后在其中查找。特别是,如果您打算进行多次查找。

people = arr.inject({}) {|memo,v| memo[v["id"].to_i]=v["name"]; memo}
people[4] # will return Danny
people[3] # will return Carl

希望对您有所帮助!

如果只需要查找一个id,线性查找就可以了。

如果您在同一个数组上进行多次查找,请从该数组创建一个散列,因此单个查找的时间复杂度为 O(1)

h =  Hash[arr.map{|a|[a["id"], a["name"]]}]
h["4"]