CartesianProduct
클래스를 생성해야하는 문제에 대해 작업하고 있습니다. 이 클래스 2 목록을 전달한 다음이 목록의 카디 전 곱 (모든 가능한 조합)을 출력 할 수 있어야합니다.2D 배열을 출력하기가 어려움
지금까지이 클래스에서 개체를 만들 수있는 모든 가능한 조합을 만들 수 있지만 이러한 결과를 화면에 출력하려고하면 각 항목이 자체 행에있는 것처럼 배열로 인식됩니다.
내 코드 :
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.each { |elt| puts elt.inspect }
: 테스트는 다음 명령을 통해 이루어집니다
c = CartesianProduct.new([:a,:b], [4,5])
=> #<CartesianProduct:0x93569f8 @output=[[:a, 4], [:a, 5], [:b, 4], [:b, 5]]>
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 '라고 불렀을 때'@ output'을 참조하는 나의 메소드를 사용할 것이라고 생각했다. – ProfessionalAmateur
좋아요, 이제 당신이하는 일을 볼 수 있습니다. 어느 쪽이든 1)'each '에 대한 정의를 꺼내고'each'를 할 때'@ output'을 호출하십시오. 그 정의는 매우 이상합니다. 또는 2)'each '를 정의하는 것을 주장하면, 거기서'inspect'를 사용해야하고,'each'를 부를 때는'c.each' 만 있으면됩니다. – sawa
정말 기괴하고 새로운 Ruby 사용자입니다. :) 제가 각각을 꺼내어 시험을하면, 모든 것이 1 줄로 나옵니다. – ProfessionalAmateur