gpt4 book ai didi

ruby - 复杂地操纵哈希数组的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:11 27 4
gpt4 key购买 nike

如何按 :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}

但我无法根据需要复杂地操作数组。老实说,谷歌搜索了几个小时。我知道如何按数字和字母顺序以及阳光下的所有事物进行排序,但我无法进入并确切地说出我想要发生的事情。

也许如果我可以迭代一个变量来跟踪 block 被使用了多少次,我可以使用 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]

最佳答案

为了 future 访问者的利益,请不要对 SHiNKiROU 使用“.values”方法感到困惑。它没有以某种方式引用“值”数组。 (是我的错,我不应该将数组称为“值”。)

只是为了说清楚:

foobar = [{value: "First", type: 0},{value: "Second", type: 0},{value: "1111", type: 1},{value: "2222", type: 1},{value: "un", type: 2},{value: "deux", type: 2}]

groups = foobar.group_by { |v| v[:type] }
puts groups.values.transpose.flatten

这样做不是为了任何粗鲁的代表,只是想帮助其他人

关于ruby - 复杂地操纵哈希数组的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com