簡體   English   中英

在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"]

返回“ Danny”,這是我想要的。

我的問題是,是否有更短,更優雅的方法來完成相同的搜索?

如果您只需要查找一個ID,則可以按需進行線性搜索。

如果您要在同一數組上執行許多查找,請從該數組創建一個哈希,因此單個查找為O(1)

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

這是一種完全合理的方法。 我看到的唯一問題是您的數據結構對查詢不友好。 您需要在數組中搜索,而不是通過哈希中的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

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM