【发布时间】:2014-04-06 22:14:49
【问题描述】:
我有以下 Ruby 数据结构:
data_struct = {
item1 => { attr1: :word_a, attr2: :word_b, attr3: :word_a},
item2 => { attr1: :word_b, attr2: :word_a },
item3 => { attr2: :word_b, attr3: :word_c}
}
我想把它改成:
new_data_struct = {
attr1 => { word_a: item1, word_b: item2 },
attr2 => { word_b: [item1, item3], word_a: item2 },
attr3 => { word_a: item1, word_c: item3 }
}
我的印象是我应该使用inject,也许还有fetch 和Hash.new() 默认值。
【问题讨论】:
-
item1、item2和item3是什么?你的意思是让它们成为符号或字符串?另外,你能描述一下这个转变吗? -
如果子哈希的所有值都是数组,而不是单个元素和数组的混合,我认为您会发现使用转换后的哈希会更容易。
-
处理数据结构转换最巧妙的方法是不要从数据结构开始。
-
不知道为什么除了没有极其详细地描述转换之外,它为什么会因为不清楚而被关闭。我说'我有一个带有示例的数据结构 X,我需要带有示例转换的数据结构 Y,我如何转换它? attr1、word_a、item1 等的细节并不重要,可以是任何东西。斯沃夫兰先生的回答内容丰富,令人大开眼界。我很想知道更多关于他的思考过程来得出这个答案。当然,托马斯先生的评论对谈话没有任何帮助。其他 2 个答案也很有帮助 - 谢谢!
-
并尝试添加到我的初始评论以使其更有帮助:虽然在许多语言中处理数据结构是处理数据的最简单方法,但在 Ruby 中,我会考虑将数据结构重构为值对象。通常这会使代码更容易阅读(= 更易于维护)
标签: ruby data-structures hash transform inject