按字母顺序按一个元素排序数组 - 可能的解决方案是按另一个数组排序?

时间:2013-10-16 10:01:33

标签: ruby arrays sorting

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

name artist album genre

此刻阵列完全是随机的。

目标

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

尝试

我记得,用另一种语言(php),我可以创建一个新的数组,例如artists,然后按songsartists数组进行排序。这在理论上是好的但是如何实现?

我创建了一个artists的排序数组,如下所示:

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

artists.sort!

这很有效,并且在测试时按字母顺序将所有artists输出到屏幕。

我的问题是我如何按songs数组对artists数组进行排序?即songs将按artists

排序

问题

是否有更简单的方法按字母顺序对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']]

1 个答案:

答案 0 :(得分: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"}
#   ]