ruby / rails基于字符串数组对记录数组进行排序

时间:2014-07-29 16:57:08

标签: ruby-on-rails ruby arrays sorting

我有一组用户记录,我想根据优先级对用户进行排序,优先级存储在一个字符串数组中,这个数组总是在变化。

所以,如果我有 users =

    User id: 1, username: "so_admin", priority: "Monday"

    User id: 2, username: "so_staff", priority: "Wednesday"

priority = [“Wednesday”,“Tuesday”,“Friday”]

如何对用户进行排序,以便首先列出优先级为“星期三”的用户,等等。

1 个答案:

答案 0 :(得分:5)

你可以这样做

users.sort_by { |u| priority.index(u.priority) || priority.size }

完成上述排序,假设下面的Array将根据您的需要进行排序,将保留所有 uniq 值。然后users数组将使用已排序数组的索引。

priority = ["Wednesday","Tuesday","Friday"]

index(obj) → int or nil

  

返回ary中第一个对象的索引,使对象为==obj。如果找不到匹配项,则返回nil

priority数组不会保留所有工作日,而是3。我想,如果任何用户具有 priority priority数组中不存在),请将这些用户放在最后一个数组中。假设,对于任何用户,都有优先级"Sunday",那么该用户将获得最低优先级。怎么样?

查看表达式priority.index(u.priority) || priority.size,现在有上面提到的示例,priority.index("sunday")给出nil右侧表达||将被评估,即priority.size3。这就是将user移动到数组 tail 的方式。

相关问题