3

好的,所以如果我有一个散列来表示这样的书:

Books = 
{"Harry Potter" => {"Genre" => Fantasy, "Author" => "Rowling"},
 "Lord of the Rings" => {"Genre" => Fantasy, "Author" => "Tolkien"}
 ...
}

有什么方法可以简明扼要地获得书籍哈​​希中所有作者的数组?(如果为多本书列出了同一作者,我需要他们的名字在每本书的数组中一次,所以不用担心淘汰重复)例如,我希望能够通过以下方式使用它:

list_authors(insert_expression_that_returns_array_of_authors_here)

有谁知道如何制作这种表达方式?非常感谢您收到的任何帮助。

4

3 回答 3

5

获取哈希值,然后使用以下方法从该值(哈希数组)中提取作者Enumerable#map

books = {
  "Harry Potter" => {"Genre" => "Fantasy", "Author" => "Rowling"},
  "Lord of the Rings" => {"Genre" => "Fantasy", "Author" => "Tolkien"}
}
authors = books.values.map { |h| h["Author"] }
# => ["Rowling", "Tolkien"]
于 2014-03-04T17:12:49.397 回答
4

我会做

Books = { 
           "Harry Potter" => {"Genre" => 'Fantasy', "Author" => "Rowling"},
           "Lord of the Rings" => {"Genre" => 'Fantasy', "Author" => "Tolkien"}
        }

authors = Books.map { |_,v| v["Author"] }
# => ["Rowling", "Tolkien"]
于 2014-03-04T17:14:45.053 回答
0

我会做。

     Books = { 
       "Harry Potter" => {"Genre" => 'Fantasy', "Author" => "Rowling"},
       "Lord of the Rings" => {"Genre" => 'Fantasy', "Author" => "Tolkien"}
              }

     def list_authors(hash)
       authors = Array.new
       hash.each_value{|value| authors.push(value["Author"]) }
       return authors 
    end


     list_authors(Books)
于 2014-03-04T18:16:42.853 回答