0

我有一个数组,songs其中包含:

name artist album genre

该数组目前是完全随机的。

目标

我希望用户能够按名称或艺术家等单独查看内容。

试图

我记得,在另一种语言 ( php) 中,我可以创建一个新数组,例如,artists然后songsartists. 这在理论上很好,但如何实施?

我创建了一个排序数组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 回答