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

use*_*199 3 ruby arrays sorting ruby-on-rails

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

所以,如果我有用户=

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

    User id: 2, username: "so_staff", priority: "Wednesday"
Run Code Online (Sandbox Code Playgroud)

优先= ["星期三","星期二","星期五"]

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

Aru*_*hit 6

你可以这样做

users.sort_by { |u| priority.index(u.priority) || priority.size }
Run Code Online (Sandbox Code Playgroud)

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

priority = ["Wednesday","Tuesday","Friday"]
Run Code Online (Sandbox Code Playgroud)

index(obj) ? int or nil

返回索引的第一对象在ary使得对象是==obj.nil如果找不到匹配则返回.

priority数组不是所有工作日,而是3.我想,如果任何用户具有优先级(priority数组中不存在),请将这些用户放在最后一个数组中.假设,任何用户有一个优先级,"Sunday"那么,该用户将被给予最低优先级.怎么样 ?

看看表达式priority.index(u.priority) || priority.size,现在用上面提到的样本,priority.index("sunday")给出nil,并且将评估右侧的表达式||,即priority.size哪个3.那怎么是user将被移动到尾部的的阵列.