在[[1,2],[2,1],[8,9],[12,12]]
中,前两个元素是相同的。我希望得到这样的输出:[[8,9],[12,12]]
。
在:
[1,2,3].product([1,2,3])
# => [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]
我想获得这样的输出:
[[1, 1], [2, 2], [3, 3]]
答案 0 :(得分:2)
要获得独特的输出,无论单个阵列的排列如何,请执行以下操作:
[1,2,3].product([1,2,3]).map(&:sort).uniq
# => [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
如果您需要仅包含重复值的输出,请执行以下操作:
[1,2,3].product([1,2,3]).map {|k,v| [k,v] if k == v}.compact
# => [[1, 1], [2, 2], [3, 3]]
答案 1 :(得分:1)
Ruby确实有一个#uniq
方法,但是删除了所有重复项,但KEEPS就是其中之一。因此,在您的情况下,这将无效,因为您似乎要删除所有具有重复项的元素。
这是一个应该解决问题的解决方案:
def remove_dups(array)
new_array = []
# first, sort each element
start_array = array.map{|e| e.sort}
start_array.each_with_index do |sub_array, idx|
temp_array = start_array.dup
temp_array.delete_at(idx)
# after deleting the element, check to see if the array still includes the element
new_array << sub_array unless temp_array.include?(sub_array)
end
new_array
end
p remove_dups([[1,2],[2,1],[8,9],[12,12]])
#=> [[8, 9], [12, 12]]
p remove_dups([1,2,3].product([1,2,3]))
#=> [[1, 1], [2, 2], [3, 3]]