我有一個包含哈希和數組的鍵,我想將這個值搜索到從Web應用程序獲得的結果。如何在Ruby中深入搜索哈希
例如:SEARCH_KEY = {搜索:[{用戶:[:如first_name,{地址:[:狀態, :城市,:拉鍊]}]},:計數],搜索2:[:位置] }
Search_key可以包含任何鍵和值。這裏的key不是靜態的,它創建動態的,所以它可能是任何。
db_data = {
search{
user: {
first_name: "Test user",
address: {
street: "main street",
state: nil,
city: "Delhi",
zip: "12345"
},
},
count: 55
test: 123
},
search2:{
location: "main_data"
mobile_no: '9998887776'
}
}
我需要獲取檢查數據存在或不存在與以下關鍵基礎:
SEARCH_KEY = {搜索:[{用戶:[:如first_name,{地址:[:狀態,:城市, :拉鍊]}]},:計數],搜索2:[:位置]}
這裏SEARCH_KEY指:
db_data[:search]
db_data[:search][:user]
db_data[:search][:user][:first_name]
db_data[:search][:user][:address]
db_data[:search][:user][:address][:state]
db_data[:search][:user][:address][:city]
db_data[:search][:user][:address][:zip]
db_data[:search][:count]
db_data[:search2]
db_data[:search2][:location]
**注意:search_key不是靜態的。 search_key的鍵總是會改變,而search_key可能是任何類型,比如散列數組,散列數組。數組的數組,哈希的哈希散列
我需要檢查所有關鍵的存在或不存在,如果其中一個關鍵是零,那麼它應該在DB_DATA DB_DATA返回false
[:搜索] [:user] [:address] [:state]爲零,那麼函數應該返回false。
如果值存在於db_data [:search] [:user] [:address] [:state]中,則函數應該返回true。
[編輯]:
我曾嘗試使用此功能
def data_present?(data, keys)
keys.each do |k,v|
return false if data[k].nil?
if v.is_a? Array
v.each do |a|
if a.is_a? Hash
data_present?(data[k], a) if data[k].is_a?Hash
return data[k].each{|r| return data_present?(r, v) } if data[k].is_a?Array
else
return false if data[k][a].nil?
end
end
end
end
end
通過
data_present稱爲(DB_DATA,SEARCH_KEY)
遞歸函數調用?工作不正常。請讓我知道我在哪裏做錯了
中指定的帖子的標題寫着「深搜索」一個'Hash'這是不是一種罕見的請求,通常是相當簡單的,通過遞歸來實現。在閱讀實際文章時,我完全喪失了關於如何定義此任務的建議,因爲您在說search_key可以是多個「Enumerable」類型的對象,這使得這更加複雜。你究竟想在這裏實現什麼? – engineersmnky 2014-10-31 15:44:10
這不是一個有效的散列。 – sawa 2014-10-31 15:45:14
@engineersmnky,我嘗試過但不能使用遞歸。你有什麼主意嗎? – 2014-10-31 15:49:38