排序基于另一个数组的顺序排列的阵列(红宝石) [英] Sort an array of array based on the order of another array(Ruby)

查看:134
本文介绍了排序基于另一个数组的顺序排列的阵列(红宝石)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个数组是这样的: ARR1 = [1,名称2,NAME3] ARR2 = [[name1,10],[NAME3 ,15],[NAME2,20] 。现在,我要排序的 ARR2 根据 ARR1 的顺序。 ARR2 的顺序会改变 ARR1 变化时的顺序。我试试这个:

  hash_object = arr2.each_with_object({})做| OBJ,哈希|
  哈希[obj.name] = OBJ
结束arr1.map {|首页| hash_object [指数]}

但结果返回[零,零,零。我困惑的,这是正确的方式,我只犯的错误,还是有解决我的问题的另一个方面。有人可以帮我吗?


解决方案

  ARR1 = [NAME1,NAME2,NAME3]
= GT; [NAME1,NAME2,NAME3]
ARR2 = [[名称1,10],[NAME3,15],[名称2,20]
= GT; [名称1,10],[NAME3,15],[名称2,20]
arr2.sort_by {| E | arr1.index(E [0])}
= GT; [名称1,10],[名称2,20],[NAME3,15]

I have two arrays like this: arr1 = [name1, name2,name3] and arr2 = [[name1,10], [name3,15], [name2, 20]]. Now I want to sort the arr2 based on the order of arr1. The order of arr2 will change whenever order of arr1 change. I try this:

hash_object = arr2.each_with_object({}) do |obj, hash| 
  hash[obj.name] = obj
end

arr1.map { |index| hash_object[index] }

But the result returned [nil, nil, nil]. I confused of this is the right way, and I only made mistake or are there another ways to solve my problem. Can someone help me?

解决方案

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]]

这篇关于排序基于另一个数组的顺序排列的阵列(红宝石)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆