我有一组用户记录,我想根据优先级对用户进行排序,优先级存储在一个字符串数组中,这个数组总是在变化。
所以,如果我有 users =
User id: 1, username: "so_admin", priority: "Monday"
User id: 2, username: "so_staff", priority: "Wednesday"
priority = [“Wednesday”,“Tuesday”,“Friday”]
如何对用户进行排序,以便首先列出优先级为“星期三”的用户,等等。
答案 0 :(得分:5)
你可以这样做
users.sort_by { |u| priority.index(u.priority) || priority.size }
完成上述排序,假设下面的Array
将根据您的需要进行排序,将保留所有 uniq 值。然后users
数组将使用已排序数组的索引。
priority = ["Wednesday","Tuesday","Friday"]
返回
ary
中第一个对象的索引,使对象为==
到obj
。如果找不到匹配项,则返回nil
。
priority
数组不会保留所有工作日,而是3
。我想,如果任何用户具有 priority (priority
数组中不存在),请将这些用户放在最后一个数组中。假设,对于任何用户,都有优先级,"Sunday"
,那么该用户将获得最低优先级。怎么样?
查看表达式priority.index(u.priority) || priority.size
,现在有上面提到的示例,priority.index("sunday")
给出nil
,右侧表达||
将被评估,即priority.size
,3
。这就是将user
移动到数组的 tail 的方式。