Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在xml页面中查找重复项_Ruby_Nokogiri - Fatal编程技术网

Ruby 在xml页面中查找重复项

Ruby 在xml页面中查找重复项,ruby,nokogiri,Ruby,Nokogiri,我试图在使用ruby和nokogiri的web服务调用返回的xml中找到重复项 我从下面的代码中得到的输出如下: found duplicate["1", "1"] found duplicate["1", "1"] found duplicate["1", "1"] found duplicate["1", "1"] found duplicate["2", "2"] <Root> <Context> <ID>1234</ID> &l

我试图在使用ruby和nokogiri的web服务调用返回的xml中找到重复项

我从下面的代码中得到的输出如下:

found duplicate["1", "1"]
found duplicate["1", "1"]
found duplicate["1", "1"]
found duplicate["1", "1"]
found duplicate["2", "2"]
<Root>
  <Context>
  <ID>1234</ID> 
<Item>
  <ID>4567</ID> 
  </Item>
<Item>
  <ID>4567</ID> 
</Item>
<Item>
  <ID>5678</ID> 
</Item>
我想知道的是,SKU 1和SKU 2已经复制。所以类似这样的东西“发现了重复的SKU[重复的SKU]。”

xml如下所示:

found duplicate["1", "1"]
found duplicate["1", "1"]
found duplicate["1", "1"]
found duplicate["1", "1"]
found duplicate["2", "2"]
<Root>
  <Context>
  <ID>1234</ID> 
<Item>
  <ID>4567</ID> 
  </Item>
<Item>
  <ID>4567</ID> 
</Item>
<Item>
  <ID>5678</ID> 
</Item>

1234
4567
4567
5678

#将产生重复项的上下文项。
$context=['a','b','c']
#类,该类将搜索数组以查找重复项
类数组
仅def_副本
重复项=[]
self.each{| each |复制1}
复制品
结束
结束
#循环遍历$context数组中的每个项
$context.each do|项|
放置“C_ItemID=“+项
#使用上下文项创建url字符串
url=“呼叫的url”
#创建xml文档
doc=Nokogiri::XML(打开(url))
#声明节点中的文本将存储在其中的空白数组
值=[]
#循环遍历每个item_id节点以查找重复项。
doc.xpath('//item/id')。每个do |节点|
价值观1
将“找到重复项”+@values.only_duplicates.inspect放入
结束
结束
结束

这里有一种更有效的方法来查找数组中的重复项(使用#count使算法速度变慢,因为它必须遍历整个数组中的每个项O(N^2)):


这里有一种更有效的方法来查找数组中的重复项(使用#count会降低算法的速度,因为它必须遍历整个数组中的每个项O(N^2)):


@Hillary添加了查找重复项的更快方法。@Hillary添加了查找重复项的更快方法。
def fast_find_duplicate_items ( in_collection=[] )
  collection.group_by do |element|
    element
  end.select do |key, value|
    value.size > 1
  end.keys
end
list_of_item_ids.group_by { |e| e }.select { |k,v| v.size > 1 }.map(&:first)