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
シンボルとしてではなく、文字列に変換され、各項目を独自の行に出力しています...
これは宿題なので、答えを探しているわけではありませんが、正しい方向への微調整はかなり役に立ちます。
編集 =============================================== =======================each
クラスでの定義を変更すると、この問題は解決しました。
def each
@output.map do |x|
yield x
end
end