【问题标题】:ruby/rails sort an array of records based on an array of stringruby/rails 根据字符串数组对记录数组进行排序
【发布时间】:2014-09-21 03:42:37
【问题描述】:

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

所以如果我有 用户 =

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby arrays sorting


    【解决方案1】:

    你可以这样做

    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.size ,其中3。这就是 user 将被移动到 arraytail 的方式。

    【讨论】:

    • 太棒了!这行得通!谢谢!您介意解释一下“priority.size”部分的作用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多