首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从地图构建排序区段

从地图构建排序区段
EN

Stack Overflow用户
提问于 2008-12-16 11:46:24
回答 4查看 556关注 0票数 2

我有键值对的未排序映射。

代码语言:javascript
运行
复制
input = {
  "xa" => "xavalue",
  "ab" => "abvalue",
  "aa" => "aavalue",
  "ba" => "bavalue",
}

现在,我想按键对它们进行排序,并按键的第一个字符将它们分组。与此类似:

代码语言:javascript
运行
复制
output1 = {
  "a" => {
      "aa" => "aavalue",
      "ab" => "abvalue",  
  },
  "b" => {
    "ba" => "bavalue",
  },  
  "x" => {
    "xa" => "xavalue",
  },  
}

  1. ,虽然这比较简单,但我正在寻找一种简洁的方法来表达从输入到output1的红宝石转换。(对于红宝石标准,我的方法可能过于冗长)
  2. 您可能还注意到地图(通常)没有排序。因此,除非我手动对键进行排序并包装对映射的访问,否则上述数据结构将无法正常工作。那么,我如何在红宝石中创建一个键序地图呢?或者已经有了吗?

  1. ,如果有序的映射方法不是那么容易的话,我将不得不将最终的结构更改为如下所示。同样,我正在寻找一些来自output2.

的简洁的ruby代码。

代码语言:javascript
运行
复制
output2 = [
  {
    "name" => "a",
    "keys" => [ "aa", "ab" ],
    "values" => [ "aavalue", "abvalue" ],
  },
  {
    "name" => "b",
    "keys" => [ "ba" ],
    "values" => [ "bavalue" ],
  },
  {
    "name" => "x",
    "keys" => [ "xa" ],
    "values" => [ "xavalue" ],
  }
]
EN

Stack Overflow用户

回答已采纳

发布于 2008-12-16 14:10:34

据我所知,Ruby中并没有排序散列/映射的概念,因此您只能使用好的旧数组。您可能希望从以下代码开始:

代码语言:javascript
运行
复制
output = input.inject({}) { |acc, pair|
  letter = pair.first[0].chr
  acc[letter] ||= {}
  acc[letter][pair.first] = pair.last
  acc
}.sort

这将为您提供表单中的数据结构。

代码语言:javascript
运行
复制
[ ["a", {"aa"=>"aavalue",
         "ab"=>"abvalue"}],
  ["b", {"ba"=>"bavalue"}],
  ["x", {"xa"=>"xavalue"}]]

通过将组件数组映射为散列..。

代码语言:javascript
运行
复制
output.map {|pair| {pair.first => pair.last}}

你可以把它转换成

代码语言:javascript
运行
复制
[{"a"=>{"aa"=>"aavalue",
        "ab"=>"abvalue"}},
 {"b"=>{"ba"=>"bavalue"}},
 {"x"=>{"xa"=>"xavalue"}}]

使用类似的地图,您可以找到列出的最后一个表单(output2):

代码语言:javascript
运行
复制
output2 = output.map { |pair|
  hash = pair.last
  { 'name' => pair.first,
    'keys' => hash.keys,
    'values' => hash.values }
}
票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/371064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档