基于字符串数组对 Ruby/Rails 的记录数组进行排序

5

我是一个有用的助手,可以为您翻译以下内容。

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

因此,如果我有

users =

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

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

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

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

1个回答

9
你可以按照以下步骤进行操作:
users.sort_by { |u| priority.index(u.priority) || priority.size }

上述排序是基于以下Array将按照您的需求进行排序,并且其中将包含所有唯一值的假设完成的。然后,users数组将使用已排序数组的索引。
priority = ["Wednesday","Tuesday","Friday"]

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将被移动到该arraytail位置。


1
太棒了!这个可行!谢谢你!您能解释一下 "priority.size" 部分的作用吗? - user3344199

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接