0

我认为这个问题已经打破了我的大脑。这就是我最终想要做到的:

mylibrary = [{:shelfa => ["booka", "bookb", "bookc"]}, {shelfb=> ["booka", "bookb"]}]

这就是我所拥有的:

class Library

  def initialize
    #create library array
    @library = Array.new
  end

  def add_shelf(shelf_name)
    #create shelf hash ({:shelfa => []}
    @shelf_name = Shelf.new
    #add shelf hash to library array
    @library << @shelf
  end

end

  class Shelf
    attr_accessor: shelf_name

    def initialize
      #create shelf hash {:shelfa => []}
      @shelf = Hash.new{|shelf_name, book_array| shelf_name[book_array] = []}
    end
  end

这应该让我明白:

mylibrary = {:shelfa => [], shelfb: => []}

但是现在我需要第三个类Book,它将创建一本书并将其放在给定的书架上,即将标题推送到相应书架键的值数组中。这就是我所拥有的:

class Book
    attr_accessor :title, :shelf_name

    def initialize(title, shelf_name)
      @title = title
      @shelf_name = shelf_name
    end

    def add_book(title, shelf_name)
      #push titles to empty array in the hash with key shelf_name
    end

  end

有任何想法吗?我不知道这种解释是否有意义,如果您有问题,我可以尝试更好地解释。谢谢!

4

3 回答 3

0

您的代码中有一个明显的拼写错误,这会起作用,但会产生非常糟糕的结果:

首先,您初始化@shelf_name

#create shelf hash ({:shelfa => []}
@shelf_name = Shelf.new

然后,您参考@shelf,即nil

#add shelf hash to library array
@library << @shelf
于 2013-06-24T16:53:29.987 回答
0

除了一些明显的拼写错误/错误(我在下面更正了其中一些)之外,您对该程序的逻辑似乎不正确。一方面,图书馆也更有意义。其次,你不能add_book在类内部有一个方法Book;书籍被添加到图书馆。Book应该只包含有关Book自身的信息:名称、作者、流派等...

class Library
  def initialize
    #create library array
    @library = []
  end

  def add_shelf( shelf_name )
    #create shelf hash ({:shelfa => []}
    @shelf = Shelf.new shelf_name

    #add shelf hash to library array
    @library << @shelf
  end

  def add_book( book, shelf_name )
     # your code here
  end
end

class Shelf
  attr_accessor :shelf_name, :shelf

  def initialize shelf_name
    @shelf_name = shelf_name 

    #create shelf hash {:shelfa => []}
    @shelf = { shelf_name => [] }
  end
end
于 2013-06-24T16:57:13.063 回答
0

所以...

@library[shelf_name] << title

...似乎是显而易见的答案。

于 2013-06-24T16:58:53.127 回答