尝试创建一组名称的每个排列,并将它们成对放置到多维数组中,然后删除任何重复项。我遇到的问题是在数组上迭代,比较两个值,如果它们相同,则删除该数组。
names = ["Bob", "Dave", "Clive"]
names2 = names.repeated_combination(2).to_a
[["Bob", "Bob"], ["Bob", "Dave"], ["Bob", "Clive"], ["Dave", "Dave"], ["Dave", "Clive"], ["Clive", "Clive"]]
这应该返回一组唯一的多维数组
names2.each { |x| x.delete_if { |y| y.slice(0) == y.slice(1) }}
但它返回的数组与以前相同,但有重复项。我试着在几个地方加上"uniq",但没有什么区别。
我会这么做:
names = ["Bob", "Dave", "Clive"]
names.combination(2).to_a
# => [["Bob", "Dave"], ["Bob", "Clive"], ["Dave", "Clive"]]
并更正您的代码:-
non_uniq_comb = names.repeated_combination(2).reject { |a,b| a == b }
# => [["Bob", "Dave"], ["Bob", "Clive"], ["Dave", "Clive"]]
如果您想删除具有相同名称的数组:
(names2.map { |n| n if n[0] != n[1]}).compact