gpt4 book ai didi

arrays - Ruby 数组搜索方法未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:11 26 4
gpt4 key购买 nike

我在脚本中编写的搜索方法无法正常工作。以下是脚本中的相关代码:

$records = []

def xml_extractor(document)
document.xpath("//record").each do |record|
$records << {"id" => record.xpath('id').text,
"first_name" => record.xpath('first_name').text,
"last_name" => record.xpath('last_name').text,
"email" => record.xpath('email').text,
"gender" => record.xpath('gender').text,
"ip_address" => record.xpath('ip_address').text,
"send_date" => record.xpath('send_date').text,
"email_body" => record.xpath('email_body').text,
"email_title" => record.xpath('email_title').text}
puts record
end
puts "\nAll records loaded!"
end


def search_by_ip(ip)
record_to_return = $records.select {|k| k["ip_address"] == ip.to_s}
puts JSON.pretty_generate(record_to_return)
end

基本上我的 xml_extractor 方法工作正常,它使用 nokogiri 将所有内容存储到数组中。正在实现的 xml 文件有上千条记录,每条记录都有自己的名字、姓氏等。但问题是,当我尝试在数组上实现 search_by_ip 方法时,会返回一个“空”值,而实际上该方法应该是什么这样做是返回属于该特定 ip 地址的整个记录​​。此外,我意识到每次执行 xml_extractor 方法时,即当将 xml 文档解析到数组中时,内容并没有真正保存在其中,而是仅在循环进行时显示。这可能就是为什么我的搜索方法得到“空”的原因。让我知道你们的想法。

最佳答案

我写了一个例子,说明如何使用OO来获得你想要的东西。我没有你的文档,所以我将你的文档简化为二维数组在读取方法中切换注释以使用您的 xml每个方法都可以链接起来,并且只做需要的事情它们都可以单独测试(这里通过 p'ting 它们)

class Xml_extractor

attr_reader :document, :records

def initialize document
@document = document
@records = []
end

def read
# @document.xpath("//record").each do |record|
@document.each do |record|
@records << {id: record[0], ip_address: record[1]}
end
self # return self so that you can chain another method
end

def search_by_ip(ip)
#return first of an array if found, nil otherwise
# attention to use a hash key here to search, not a string
@records.select {|k| k[:ip_address] == ip.to_s}.first
end

end

document = [[0, "192.168.0.1"], [1, "192.168.0.2"]]
p Xml_extractor.new(document).read.records
# [{:id=>0, :ip_address=>"192.168.0.1"}, {:id=>1, :ip_address=>"192.168.0.2"}]
p Xml_extractor.new(document).read.search_by_ip("192.168.0.2")
# [{:id=>1, :ip_address=>"192.168.0.2"}]
p Xml_extractor.new(document).read.search_by_ip("192.168.0.2").to_json
# "[{\"id\":1,\"ip_address\":\"192.168.0.2\"}]"

关于arrays - Ruby 数组搜索方法未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49347476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com