根据另一个数组(Ruby)的顺序对数组数组进行排序
我有两个这样的数组: arr1 = [name1, name2,name3]
和arr2 = [[name1,10], [name3,15], [name2, 20]]
。 现在我想根据arr1
的顺序对arr2
进行排序。 只要arr1
顺序发生变化, arr2
的顺序就会改变。 我试试这个:
hash_object = arr2.each_with_object({}) do |obj, hash| hash[obj.name] = obj end arr1.map { |index| hash_object[index] }
但结果返回[nil,nil,nil]。 我很困惑这是正确的方法,我只是犯了错误或有其他方法来解决我的问题。 有人能帮我吗?
arr1 = ["name1", "name2", "name3"] => ["name1", "name2", "name3"] arr2 = [["name1",10], ["name3",15], ["name2", 20]] => [["name1", 10], ["name3", 15], ["name2", 20]] arr2.sort_by { |e| arr1.index(e[0]) } => [["name1", 10], ["name2", 20], ["name3", 15]]
我会做这样的事情:
arr2.sort_by { |element| arr1.index(element.first) }
这是另一种方式:
arr2.values_at(*arr2.map { |str,_| arr1.index(str) }) #=> [["name1", 10], ["name2", 20], ["name3", 15]]