0

以下を含む配列がありsongsます。

name artist album genre

現時点では、配列は完全にランダムです。

標的

ユーザーが名前別、アーティスト別などでコンテンツを分けて閲覧できるようにしてほしい。

試み

別の言語 ( php) では、たとえば の新しい配列を作成し、artistsそのsongs配列をartists. これは理論的には優れていますが、どのように実装しますか?

artists次のように、のソート済み配列を作成しました。

    songs.each { |member|
               artists << member.artist
      }

artists.sort!

これはうまく機能artistsし、テスト時にすべてをアルファベット順に画面に出力します。

私の問題は、songs配列を配列でソートする方法artistsです。つまりsongsartists

質問

songs配列をアルファベット順に並べ替える簡単な方法はありますか?

name最終的には、配列、artist配列、album配列、genre配列、それぞれが配列と同じ内容を持つがsongs、関連するフィールドでアルファベット順にソートされることが理想的です。

助けてくれてありがとう。

入力:

Songs=

[['Song A','B Artist'],['Song D','A Artist'],['Song D','C Artist']]

出力例

Artist=

[['A Artist','Song D'],['B Artist','Song A'],['C Artist','Song D']]

4

1 に答える 1

2

ありますEnumerable#sort_by

songs = [
  {name: "Like a Rolling Stone", artist: "Bob Dylan"},
  {name: "(I Can't Get No) Satisfaction", artist: "The Rolling Stones"},
  {name: "Imagine", artist: "John Lennon" }
]

songs.sort_by { |song| song[:name] }
#=> [
#     {:name=>"(I Can't Get No) Satisfaction", :artist=>"The Rolling Stones"},
#     {:name=>"Imagine", :artist=>"John Lennon"},
#     {:name=>"Like a Rolling Stone", :artist=>"Bob Dylan"}
#   ]

songs.sort_by { |song| song[:artist] }
#=> [
#     {:name=>"Like a Rolling Stone", :artist=>"Bob Dylan"},
#     {:name=>"Imagine", :artist=>"John Lennon"},
#     {:name=>"(I Can't Get No) Satisfaction", :artist=>"The Rolling Stones"}
#   ]
于 2013-10-16T10:38:38.353 に答える