我正在解决一个需要创建CartesianProduct
类的问题。我应该能够通过这个 2 类列表,然后输出这些列表的笛卡尔积(所有可能的组合)。
到目前为止,我可以从此类中创建一个对象,创建所有可能的组合,但是当我尝试将这些结果输出到屏幕时,我将每个项目都放在自己的行中,就好像它没有意识到它是一个数组一样。
我的代码:
class CartesianProduct
include Enumerable
# Your code here
def initialize(a,b)
@output = []
a.each do |x|
b.each do |y|
if !(output.include? [x,y])
output << [x,y]
end
end
end
end
#getter
def output
@output
end
def each
@output.each do |a| puts a end
end
#setter
def output=(a,b)
a.each do |x|
b.each do |y|
if !(output.include? [a,b])
output << [a,b]
end
end
end
end
end
我用什么来测试:
c = CartesianProduct.new([:a,:b], [4,5])
=> #<CartesianProduct:0x93569f8 @output=[[:a, 4], [:a, 5], [:b, 4], [:b, 5]]>
测试通过以下命令完成:c.each { |elt| puts elt.inspect }
我得到:
irb(main):1403:0> c.each { |elt| puts elt.inspect }
a
4
a
5
b
4
b
5
=> [[:a, 4], [:a, 5], [:b, 4], [:b, 5]]
但我应该得到:
# [:a, 4]
# [:a, 5]
# [:b, 4]
# [:b, 5]
我的输出不是打印symbols
as 符号而是转换为字符串,并将每个项目打印在自己的行上......
这是家庭作业,所以我不是在寻找答案,但是朝着正确的方向轻推会很有帮助。
编辑 =================================================== ======================= 更改我each
在课堂上的定义解决了这个问题。
def each
@output.map do |x|
yield x
end
end