Ruby 从嵌套数组中删除重复项

Ruby 从嵌套数组中删除重复项,ruby,arrays,duplicates,Ruby,Arrays,Duplicates,我有一个数组,其中包含按特定顺序排列的数字。我想从嵌套数组中删除重复项,但有一个层次结构:如果数组的较低索引中出现一个数字,则删除数组链中的所有重复项 例如: nums=[[10,6,14],[6],[10,6,9],[10,13,6],[10,13,6,9,16],[10,13]] nums[0]包含[10,6,14],因此任何后续提到的10,6,14都应该从链中的其他数组中删除,这意味着nums[2]应该删除10,6,只保留9 我在使用嵌套循环时遇到问题,有Ruby向导可以帮助我吗?这应该可

我有一个数组,其中包含按特定顺序排列的数字。我想从嵌套数组中删除重复项,但有一个层次结构:如果数组的较低索引中出现一个数字,则删除数组链中的所有重复项

例如: nums=[[10,6,14],[6],[10,6,9],[10,13,6],[10,13,6,9,16],[10,13]]

nums[0]包含[10,6,14],因此任何后续提到的10,6,14都应该从链中的其他数组中删除,这意味着nums[2]应该删除10,6,只保留9

我在使用嵌套循环时遇到问题,有Ruby向导可以帮助我吗?

这应该可以:

input = [[10, 6, 14], [6], [10, 6, 9], [10, 13, 6], [10, 13, 6, 9, 16], [10, 13]]
seen = []
output = input.map do |numbers|
  new = numbers.uniq - seen
  seen += new
  new
end
# => output is [[10, 6, 14], [], [9], [13], [16], []]
如果要删除输出中的空列表,只需

output.reject!(&:empty?)
require'set'
nums=[[10,6,14],[6],[10,6,9],[10,13,6],[10,13,6,9,16],[10,13]]
found=Set.new
新的_nums=[]
对于nums do中的子阵列
sub_new=[]
因为我在子阵中做什么
如果找不到,您是谁?我

sub_new以下内容是否不正确?是否应删除
[6]

nums = [[10, 6, 14], [6], [10, 6, 9], [10, 13, 6], [10, 13, 6, 9, 16], [10, 13]]

def remove_duplicate_numbers( array )
  seen = []
  array.map{ |sub_array|
    result = sub_array - seen
    seen += sub_array
    result
  }
end

p remove_duplicate_numbers( nums )
#=> [[10, 6, 14], [], [9], [13], [16], []]

如果这不是您想要的,请发布阵列的实际输出。

另一种方式。它保持数组中元素的原始顺序:

require 'set'
nums = [[10, 6, 14], [6], [10, 6, 9], [10, 13, 6], [10, 13, 6, 9, 16], [10, 13]]
nums2 = nums.inject([[], Set.new]) do |(output, seen), ary|  
  [output << ary.reject { |a| seen.include?(a) }, seen.union(ary)]
end[0]
p nums2
# [[10, 6, 14], [], [9], [13], [16], []]
require'set'
nums=[[10,6,14],[6],[10,6,9],[10,13,6],[10,13,6,9,16],[10,13]]
nums2=nums.inject([],Set.new])do |(输出,见),ary |

[输出哇,这是美丽和优雅的。谢谢!现在被接受为答案,网站让我等了2分钟。
require 'set'
nums = [[10, 6, 14], [6], [10, 6, 9], [10, 13, 6], [10, 13, 6, 9, 16], [10, 13]]
nums2 = nums.inject([[], Set.new]) do |(output, seen), ary|  
  [output << ary.reject { |a| seen.include?(a) }, seen.union(ary)]
end[0]
p nums2
# [[10, 6, 14], [], [9], [13], [16], []]