我有一个用户记录数组,我想根据优先级对用户进行排序,它存储在一个字符串数组中,并且这个数组总是在变化。
所以如果我有 用户 =
User id: 1, username: "so_admin", priority: "Monday"
User id: 2, username: "so_staff", priority: "Wednesday"
优先级 = ["星期三","星期二","星期五"]
如何对我的用户进行排序,以便首先列出优先级为“星期三”的用户,等等。
最佳答案
你可以这样做
users.sort_by { |u| priority.index(u.priority) || priority.size }
以上排序已完成,假设下面的 Array
将根据您的需要排序,将包含所有 uniq 值。 users
数组将使用已排序数组的索引。
priority = ["Wednesday","Tuesday","Friday"]
Returns the index of the first object in
ary
such that the object is==
toobj
. Returnsnil
if no match is found.
priority
数组不包含所有工作日,而是 3
。我想,如果任何用户有 priority,priority
数组中没有,就让这些用户放在最后一个数组中。假设,对于任何用户都有一个优先级,“星期日”
,那么,该用户将被赋予最低优先级。怎么样?
看表达式 priority.index(u.priority) || priority.size
,现在使用上述示例,priority.index("sunday")
给出 nil
,右侧 ||
的表达式将被评估,即 priority.size
,其中 3
。这就是 user
将移动到 array 的 tail 的方式。
关于ruby-on-rails - ruby/rails 根据字符串数组对记录数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020892/