sgi*_*sgi 28 ruby arrays sorting
我想按照另一个数组中给出的特定顺序对数组进行排序.
EX:考虑一个数组
a=["one", "two", "three"]
b=["two", "one", "three"]
Run Code Online (Sandbox Code Playgroud)
现在我想按'b'的顺序对数组'a'进行排序,即
a.each do |t|
# It should be in the order of 'b'
puts t
end
Run Code Online (Sandbox Code Playgroud)
所以输出应该是
two
one
three
Run Code Online (Sandbox Code Playgroud)
有什么建议?
And*_*imm 51
数组#sort_by就是你所追求的.
a.sort_by do |element|
b.index(element)
end
Run Code Online (Sandbox Code Playgroud)
响应评论的更具可扩展性的版本:
a=["one", "two", "three"]
b=["two", "one", "three"]
lookup = {}
b.each_with_index do |item, index|
lookup[item] = index
end
a.sort_by do |item|
lookup.fetch(item)
end
Run Code Online (Sandbox Code Playgroud)
Chi*_*tan 10
假设a要按照元素的顺序进行排序b
sorted_a =
a.sort do |e1, e2|
b.index(e1) <=> b.index(e2)
end
Run Code Online (Sandbox Code Playgroud)
我通常使用它来按照ActiveRecord表单上字段的出现顺序对错误消息进行排序.