我有两个数组要根据另一个数组进行比较和排序。具体如下:
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]}
答案 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)
我假设你想根据a
中b
的位置对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) }