3

さて、次のような本を表すハッシュのハッシュがあるとします。

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

books ハッシュ内のすべての著者の配列を簡潔に取得する方法はありますか? (同じ著者が複数の本にリストされている場合、各本に一度配列に名前が必要なので、重複を取り除くことを心配する必要はありません)たとえば、次のように使用できるようにしたいと思います:

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 に答える
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 に答える