【问题标题】:Group by boolean value but change key in ruby on rails按布尔值分组,但在 ruby​​ on rails 中更改键
【发布时间】:2015-02-23 19:20:44
【问题描述】:

我正在按布尔值的 before 属性对数组进行排序,这可行,但我宁愿不使用 true 和 false 作为哈希值,并且在 true 时使用'before',在 before 等于 false 时使用'after'

a.each { |x| arr << x.answers.group_by(&:before) unless x.answers == nil }

有没有简单的方法来做到这一点?

即不是true: [], false: [] 我更喜欢before: [], after: []

【问题讨论】:

    标签: ruby-on-rails ruby arrays ruby-on-rails-4


    【解决方案1】:

    当然是这样

    x.answers.group_by {|e| e.before ? :before : :after}
    

    这将创建Hash{before: [],after:[]}

    例如。

    a = [1,2,3,4,5,6,7]
    a.group_by {|n| n.odd? ? :odd : :even} 
    #=> {odd: [1, 3, 5, 7], even: [2, 4, 6]}
    

    #group_by 作用于块的返回响应,因此 truefalse 成为键,但您可以将响应替换为您喜欢的任何内容,而这些将充当键。这意味着您可能有超过 2 个退货,例如

    a = [1,2,3,4,5,6,7]
    a.group_by {|n| n == 2 ? :two : n == 3 ? :three : n.odd? ? :odd : :even} 
    #=> {:odd=>[1, 5, 7], :two=>[2], :three=>[3], :even=>[4, 6]}
    

    我使用三元运算符来节省空间我不建议将它们嵌套得这么深,因为它会降低可读性这只是一个示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      相关资源
      最近更新 更多