需要根据另一个数组数组对数组进行排序

时间:2015-07-14 05:23:46

标签: ruby

我有两个数组要根据另一个数组进行比较和排序。具体如下:

a = [["A", 1075000], ["C", 1750000], ["D", 0], ["E", 0], ["B", 0]]
b = ['A','B','C','D','E']

数组a应按如下顺序排序(其中a与b进行比较):

[["A", 1075000], ["B", 0], ["C", 1750000], ["D", 0], ["E", 0]]

我试过这个:

sort_by a.sort! {|a1,b1| a1[0] <=> b1[0]}

2 个答案:

答案 0 :(得分:4)

另一种方法:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.request',
    'apps.area.context_processors.socials',
)

答案 1 :(得分:3)

我假设你想根据ab的位置对b中的元素进行排序,'A'中的元素是字符串'B',{{1}等等而不是常量。

然后我会做这样的事情:

a = [["A", 1075000], ["C", 1750000], ["D", 0], ["E", 0], ["B", 0]]
b = ['A','B','C','D','E']

a.sort { |x, y| b.index(x.first) <=> b.index(y.first) }
#=> [["A", 1075000], ["B", 0], ["C", 1750000], ["D", 0], ["E", 0]]

根据b的大小,使用sort_by代替sort可能有意义。 sort_by捕获块的返回值,并且不会多次计算块:

a.sort_by { |x| b.index(x) }