Arrays 使用“Sort”对ruby中的对象数组进行排序

Arrays 使用“Sort”对ruby中的对象数组进行排序,arrays,ruby,sorting,Arrays,Ruby,Sorting,如何对该数组进行排序,使optional=true的所有哈希值都是最后一个 my_array = [ { name: "foo", optional: true }, { name: "pop" }, { name: "boop", optional: true }, { name: "pop", optional: false } ] 我试过这个: my_array.sort { |a,b| a['optional'] <=> b['optional'] }

如何对该数组进行排序,使optional=true的所有哈希值都是最后一个

my_array = [
  { name: "foo", optional: true }, 
  { name: "pop" }, 
  { name: "boop", optional: true },
  { name: "pop", optional: false }
]
我试过这个:

my_array.sort { |a,b| a['optional'] <=> b['optional'] }
错误是令人惊讶的,因为执行['optional']将返回true、false或nil值

注:
我知道这个解决方案。按{| a | a['optional']-1:0}对u进行排序。我想特别了解排序方法。

布尔值不是顺序数据类型-true不大于或小于false,它只是不相等,因此也不能使用运算符。如果要根据可选属性对数组进行排序,则需要一些简单的自定义逻辑。例如:

my_array.sort { |a,b| a['optional'] == b['optional'] ? 0 : a['optional'] ? 1 : -1}

布尔值不是有序数据类型-true不大于或小于false,它只是不相等,因此也不能使用运算符。如果要根据可选属性对数组进行排序,则需要一些简单的自定义逻辑。例如:

my_array.sort { |a,b| a['optional'] == b['optional'] ? 0 : a['optional'] ? 1 : -1}
要使排序正常工作,必须根据以下步骤实现块:

块必须实现a和b之间的比较,并返回-1, 当a跟在b后面时,当a和b相等时为0,如果b跟在a后面时为+1

@穆雷尼克已经教过你怎么做了

就我个人而言,我建议使用sort_by,因为这正是它的基本用途。

要使sort起作用,您必须根据以下步骤实现块:

块必须实现a和b之间的比较,并返回-1, 当a跟在b后面时,当a和b相等时为0,如果b跟在a后面时为+1

@穆雷尼克已经教过你怎么做了

就我个人而言,我建议使用sort_by,因为这正是它的基本用途