【发布时间】:2008-12-16 11:46:24
【问题描述】:
我有未排序的键值对映射。
input = {
"xa" => "xavalue",
"ab" => "abvalue",
"aa" => "aavalue",
"ba" => "bavalue",
}
现在我想按键对它们进行排序,并按键的第一个字符将它们聚集成部分。类似这样:
output1 = {
"a" => {
"aa" => "aavalue",
"ab" => "abvalue",
},
"b" => {
"ba" => "bavalue",
},
"x" => {
"xa" => "xavalue",
},
}
虽然这相对微不足道,但我正在寻找一种简洁的方式来表达在 ruby 中从输入到输出 1 的这种转换。 (对于 ruby 标准,我的方法可能过于冗长)
您可能还注意到地图(通常)没有排序。因此,除非我手动对键进行排序并包装对地图的访问,否则上述数据结构将无法正常工作。那么我将如何在 ruby 中创建一个关键的有序映射呢?还是已经有了?
如果有序映射方法不是那么容易,我将不得不将最终结构更改为如下所示。同样,我正在寻找一些从输入到输出的简洁 ruby 代码。
.
output2 = [
{
"name" => "a",
"keys" => [ "aa", "ab" ],
"values" => [ "aavalue", "abvalue" ],
},
{
"name" => "b",
"keys" => [ "ba" ],
"values" => [ "bavalue" ],
},
{
"name" => "x",
"keys" => [ "xa" ],
"values" => [ "xavalue" ],
}
]
【问题讨论】:
-
有序的哈希只存在于 1.9 中,但是无序的可以变成数组。有时间我会在稍后发布解决方案
标签: ruby collections