在Array ruby​​中排序

时间:2010-10-20 08:13:09

标签: ruby-on-rails ruby arrays

我有阵列

a = ["aaa", "bee", "cee", "dee"]

我希望有一个新的数组,如:

a = ["cee", "aaa", "dee", "bee"]

请帮帮我。感谢。

5 个答案:

答案 0 :(得分:4)

a = ["aaa", "bee", "cee", "dee"]
b = [a[2], a[0], a[3], a[1]]
抱歉,无法抗拒。说真的,请解释这个奇怪的“排序”。

答案 1 :(得分:2)

您可以为Array.sort方法提供一个块来进行自定义排序,如下所示:

[ "aaa", "bee", "cee", "dee"].sort do |x,y|
   # do the actual custom sorting
end

答案 2 :(得分:1)

看看阵列交叉点,例如[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]

两个数组中的第一个确定元素的排序。因此,只需使用预定义的数组["DVD", "Blueray", "ipod"]并对其上的未排序数组执行交集操作:a = ["DVD", "Blueray", "ipod"] & a

例如:a = ["DVD", "Blueray", "ipod"] & ["ipod", "DVD"] #=> ["DVD", "ipod"]

非常优雅和简单的解决方案。额外奖励:无效的值被丢弃,没有任何异常或错误或者什么。 (这是奖金吗?也许!)

答案 3 :(得分:0)

根据您的评论,您希望将名为Blueray,DVD, ipod的数组排序为DVD, Bluray, ipod

与散列不同,数组按定义是基于顺序的。因此,如果可能,您可以按正确的顺序重新定义数组。

否则我会建议使用带有id,名称和描述的域表。只需确保以正确的顺序插入行(id是订单),所有选择框都可以根据需要使用这些选项。同样使用域表,您可以通过id引用视频类型。

答案 4 :(得分:0)

a = ["aaa", "bee", "cee", "dee"]
a = [2, 0, 3, 1].map { |i| a[i] }
p a    # => ["cee", "aaa", "dee", "bee"]