如何按它们的 :type 对以下数组的哈希进行排序?我想以周期性的方式对它们进行数字排序。我的意思是让类型变为 0,1,0,1,0,1
当前数组:
values = [{value: "First", type: 0},{value: "Second", type: 0},{value: "1111", type: 1},{value: "2222", type: 1}]
它需要看起来如何:
values = [{value: "First", type: 0},{value: "1111", type: 1},{value: "Second", type: 0},{value: "2222", type: 1}]
我可以像这样对它进行数字排序:
values.sort_by! { |x| x[:type] }
我将所有类型等于 1 的项目带到数组的开头,如下所示:
values.sort_by! { |x| x[:type] == 1 ? 1 : 0}
但是我不能像我需要的那样复杂地操作数组。老实说,已经搜索了几个小时。我知道如何按数字和字母顺序以及阳光下的所有事物排序,但我无法进入那里并准确地说出我想要发生的事情。
也许如果我可以迭代一个变量来跟踪该块被使用了多少次,我可以使用一个 if 语句,所以当迭代器 == 2(意味着它订购了一组 0 和 1)时,它可以订购下一对,但是我真的找不到任何东西。sort_by 方法是正确的方法吗?
我也希望它是动态的。如果数组看起来像这样:
values = [{value: "First", type: 0},{value: "Second", type: 0},{value: "1111", type: 1},{value: "2222", type: 1},{value: "Un", type: 2},{value: "Deux", type: 2}]
然后它应该看起来像这样:
values = [{value: "First", type: 0},{value: "1111", type: 1},{value: "Un", type: 2},{value: "Second", type: 0},{value: "2222", type: 1},{value: "Deux", type: 2}]
很失望我无法解决这个问题,但我对使用自定义方法对数组进行排序知之甚少。仅使用 ruby 默认值的升序和降序。
“类型”的数量将始终保持一致。:types 的顺序(在订购之前)将始终如下所示:
0,0,0,1,1,1
或者
0,0,0,1,1,1,2,2,2
没有 0,1,1,2 或任何东西。
更简单的例子:
[0,0,1,1,2,2] 需要排序为 [0,1,2,0,1,2]
排序方法需要是动态的,所以它也可以这样做:
[0,0,1,1,2,2,3,3] 需要排序为 [0,1,2,3,0,1,2,3]