我有一个非常大的数据集,其组织方式如下:
users = [
{
username: "Bill",
gender: "Male",
details: {
city: "NY"
}
},
{
username: "Mary",
gender: "Female",
details: {
city: "LA"
}
}
]
我需要一种通过多个键的多个值搜索多条记录的快速方法。
我有以点分隔的键列表:
keys = ["gender", "details.city"]
我需要做这样的事情(用伪代码编写):
my_users = users.any? {|user|
keys.each do |key|
user.key == "NY"
end
}
我知道这行不通。它不起作用的原因之一是我的键列表是点分隔的,所以我可以将它拆分为一个键数组,如 ['gender']
和 [ 'details']['city']
,或使用如下方法将用户哈希转换为以点分隔的对象:
def to_o
JSON.parse to_json, object_class: OpenStruct
end
最佳答案
希望这个方法能如你所愿
def search(users, keys, value)
users.select do |user|
keys.any? do |key|
user.dig(*key.split('.').map(&:to_sym)) == value
end
end
end
search(users, keys, 'NY')
#=> [{ :username => "Bill", :gender => "Male", :details => { :city => "NY" } }]
关于ruby-on-rails - 如何在大型 JSON 数组中搜索并通过多个键查找记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58614275/