我正在研究一個問題,我需要創建一個CartesianProduct
類。我應該能夠通過這個2類列表,然後輸出這些列表的Cartesian產品(所有可能的組合)。難以輸出二維數組
到目前爲止,我可以從這個類創建一個對象,創建所有可能的組合,但是當我嘗試將這些結果輸出到屏幕時,我會在它自己的行上獲取每個項目,就好像它沒有意識到它是一個數組。
我的代碼:
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
的符號,而是轉換爲字符串,其打印上自己的每一項目...
這是家庭作業,所以我不是在尋找答案,而是在正確的方向推動會有所幫助。
編輯 =========================================== ============================= 在類中更改我的定義each
解決了此問題。
def each
@output.map do |x|
yield x
end
end
即使我定義'each'我的課裏面?我想當我這樣做,然後調用'c.each'它會使用我的方法引用'@輸出'? – ProfessionalAmateur
好吧,現在我明白你在做什麼了。或者1)取出你的'each'的定義,當你做'each'時調用'@ output'。這個定義很奇怪。或者,2)如果你在定義'each'堅持,那麼你必須使用'inspect'那裏,當你調用'each',所有你需要的是'c.each',僅此而已。 – sawa
我敢肯定,這是非常奇怪的,非常新的Ruby用戶。 :)當我拿出我的每一個並且運行測試,我得到一切一行。 '=> [[:一,4],[:一,5],[:B,4],[:B,5]]' – ProfessionalAmateur