我是Ruby新手。我正在创建一个rails平台,我遇到了以下问题:
我有我的第一个数组,为了简单起见,我把'资本'称为:
capital = [A,B,C,D]
。我有第二个数组small = [a,b,c,d]
。 small
的元素与capital
的元素有多对一的关系,如:
capital
has_many:small
这两个表通过我的数据库中的两个表链接,因此可以通过
打印这些数组的有效组合capital.each do |x|
small.each do |y|
puts x,y
end
end
打印出数据库中定义的x,y的有效组合。这完全没问题。
现在,问题出现了:我有第三个数组array_3
,其中包含capital
和small
元素的某些组合,如:
array_3 = [(A,c), (C,d), (D,b)]
我想打印数据库中定义的capital
和small
元素的所有有效组合,以便array_3
中不存在该组合。我该怎么做呢?
答案 0 :(得分:2)
capital = %w(A B C D)
small = %w(a b c d)
array_3 = [%w(A c), %w(C d), %w(D b)]
capital.product(small) - array_3
#=> [["A", "a"], ["A", "b"], ["A", "d"], ["B", "a"], ["B", "b"], ["B", "c"], ["B", "d"], ["C", "a"], ["C", "b"], ["C", "c"], ["D", "a"], ["D", "c"], ["D", "d"]]
答案 1 :(得分:1)
你可以这样做
capital.each do |x|
small.each do |y|
puts x,y unless array_3.include?([x,y])
end
end
答案 2 :(得分:1)
此处适用于capital
small
和array_3
的所有组合
capital.each do |x|
small.each do |y|
puts "[#{x}, #{y}]" unless array_3.exclude?([x,y])
puts "[#{y}, #{x}]" unless array_3.exclude?([y,x])
end
end
在控制台中检查代码:
> small
=> ["a", "b", "c", "d"]
> capital
=> ["A", "B", "C", "D"]
> array_3
=> [["A", "c"], ["C", "d"], ["D", "b"], ["A", "A"], ["C", "C"], ["a", "C"], ["b", "A"]]
> capital.each do |x|
> small.each do |y|
> puts "[#{x}, #{y}]" unless array_3.exclude?([x,y])
> puts "[#{y}, #{x}]" unless array_3.exclude?([y,x])
> end
> end
<强>输出:强>
=>[b, A] # [small, capital]
[A, c] # [capital, small]
[a, C] # [small, capital]
[C, d] # [capital, small]
[D, b] # [capital, small]
注意:您可以使用if array_3.include?
代替unless array_3.exclude?
,这将返回相同的结果。