Tag: 哈希

展平嵌套的json对象

我正在寻找一种方法,将“json”哈希变为扁平哈希,但将路径信息保存在扁平键中。 例如: h = {“a” => “foo”, “b” => [{“c” => “bar”, “d” => [“baz”]}]} 压扁(h)应该返回: {“a” => “foo”, “b_0_c” => “bar”, “b_0_d_0” => “baz”}

如何从Ruby中的哈希数组中获取唯一元素?

我有一个哈希数组,我想要它的唯一值。 调用Array.uniq并不能满足我的期望。 a = [{:a => 1},{:a => 2}, {:a => 1}] a.uniq # => [{:a => 1}, {:a => 2}, {:a => 1}] 我期望的地方: [{:a => 1}, {:a => 2}] 在网上搜索时,我没有想出一个我满意的解决方案。 人们建议重新定义Hash.eql? 和Hash.hash ,因为这是Array.uniq查询的内容。 编辑:在现实世界中遇到这个问题时,哈希值稍微复杂一些。 它们是解析的JSON的结果,它具有多个字段,其中一些值也是哈希值。 我有一系列的结果,我想过滤掉唯一的值。 我不喜欢重新定义Hash.eql? 和Hash.hash解决方案,因为我要么必须全局重新定义Hash ,要么为我的数组中的每个条目重新定义它。 为每个条目更改Hash的定义会很麻烦,尤其是因为每个条目中可能存在嵌套的哈希值。 在全球范围内改变Hash有一些潜力,特别是如果它是暂时完成的话。 我想构建另一个类或辅助函数来包装保存旧的定义并恢复它们,但我认为这会增加实际需要的复杂性。 使用inject似乎是重新定义Hash一个很好的选择。

将数组的哈希变成Ruby中的哈希数组

我们有以下数据结构: {:a => [“val1”, “val2”], :b => [“valb1”, “valb2”], …} 我想把它变成 [{:a => “val1”, :b => “valb1”}, {:a => “val2”, :b => “valb2”}, …] 然后回到第一个表格。 任何看起来很漂亮的人?

将哈希值保存到Ruby上

我只是在编程方面迈出了第一步。 我刚刚在Code Academy完成了另一堂课。 这次我被要求创建一个小电影目录。 这是我的问题:如何在文件而不是自己的代码中保存/加载带有电影标题和评级的哈希? 以下是代码现在的样子(用葡萄牙语写几句,但你可能会忽略它: movies = { Memento: 3, Primer: 4, Ishtar: 1 } puts “O que você gostaria de fazer?” puts “– Digite ‘add’ para adicionar um filme.” puts “– Digite ‘update’ para atualizar um filme.” puts “– Digite ‘display’ para mostrar todos os filmes.” puts “– Digite ‘delete’ para deletar um […]

从另一个哈希中的相应值中减去哈希值

我希望能够减去两个哈希并在Ruby中获得第三个哈希值。 这两个哈希看起来像这样: h1 = {“Cat” => 100, “Dog” => 5, “Bird” => 2, “Snake” => 10} h1.default = 0 h2 = {“cat” => 50, “dog” => 3, “BIRD” => 4, “Mouse” => 75, “Snake” => 10} h2.default = 0 我希望能够像这样在h1上调用一个方法: h1.difference(h2) 并获得此哈希作为结果: {“Cat” => 50, “Dog” => 2, “BIRD” => -2, “Mouse” => -75} 我想创建一个新哈希,其中包含来自两个哈希的键和新哈希的值,它们是第一个哈希中键的值减去第二个哈希中该键的值。 […]

修改默认哈希值

Ruby允许您为哈希定义默认值: h=Hash.new([‘alright’]) h[‘meh’] # => [“alright”] 显示散列时会显示值的赋值,但修改后的默认值不会。 哪里’bad’ ? h[‘good’]=[‘fine’,’dandy’] h[‘bad’].push(‘unhappy’) h # => {“good”=>[“fine”, “dandy”]} 如果我们明确要求, ‘bad’出现。 h[‘bad’] # => [“alright”, “unhappy”] 为什么在显示哈希时不会显示修改后的默认值?

DRY方式将哈希值分配给对象

我正在寻找一种优雅的方法将存储在Hash中的值分配给预先存在的对象。 为了清楚起见,如果我有一个对象,说obj有两个属性,比如名字和年龄,我想分配来自哈希的这些值而不做类似的事情: obj.name = hash[:name] obj.age = hash[:age] 感谢您的关注。 西蒙娜

方法ruby中散列的未定义局部变量

出于某种原因,我得到了 NameError: undefined local variable or method `states’ for main:Object 虽然国家是明确定义的。 这里发生了什么? 在irb中我添加了状态并使用状态[:CA]访问它,但是当我把它放在一个方法中时我得到了那个错误。 states = { CA: ‘California’, FL: ‘Florida’, MI: ‘Michigan’, NY: ‘New York’, OR: ‘Oregon’, } states[:CO] = ‘Colorado’ states[:HI] = ‘Hawaii’ cities = { CA: [‘Alameda’, ‘Apple Valley’, ‘Exeter’], FL: [‘Exeter’, ‘Amelia Island’, ‘Bunnell’], MI: [‘Ann Arbor’, ‘East China’, ‘Elberta’], NY: [‘Angelica’, […]

如何使用单个字符串键访问散列的嵌套元素?

我正在和Ruby搞砸,基本上我都有 @trans = { :links => { :quick_notes => “aaaaaaa” } } 我想打个电话 def t #…something end t(‘links.quick_notes’) 访问 trans[:links][:quick_notes] 我基本上试图实现与使用国际化时相同的function I18n.t(‘something.other.foo’) 我想出了这种方法 def t(key) a=” key.to_s.split(‘.’).each{|key| a+=”[:#{key}]” } #now a == “[:links][:quick_notes]” #but I cant figure out how can I call it on @trans variable end t(‘links.quick_notes’) 有任何想法吗 ? 感谢名单

在Ruby中动态创建多维哈希

我是一名PHP开发人员,他试图获得一些Ruby熟练程度。 我现在正在削减其中的一个项目是源代码审计工具,它可以扫描webapp文件,查找多种Web编程语言中的潜在危险函数。 找到匹配项后,脚本会将相关信息保存在poi (兴趣点)类中,以便稍后显示。 该类的示例实例看起来像这样(在YAML中建模): poi: file_type: “php” file: “the-scanned-file.php” line_number: 100 match: “eval()” snippet: “echo eval()” 在展览中,我想组织这些兴趣点,如下所示: – file_type — file — match (the searched payload) 因此,在演示之前,我正在尝试将一个平面的poi对象数组构成一个镜像上面结构的哈希。 这将允许我简单地遍历散列中的项目以产生所需的屏幕上组织。 (或者至少,这是计划。) 现在,对于我的问题:我如何在Ruby中做到这一点? 在PHP中,我可以很容易地做到这样的事情: file_type][$point->file][$point->match][] = $point; } ?> 我试过将这种思想从PHP翻译成Ruby,但无济于事: sorted_pois = {} @points_of_interest.each_with_index do |point, index| sorted_pois[point.file_type.to_sym][point.file.to_sym][point.match.to_sym].push point end 我已经花了几个小时在这上面,而且此刻我的头撞到了墙上,所以我想我离开了基地。 在Ruby中处理这个问题的正确方法是什么? 更新: 作为参考,这是我定义的精确方法: # sort the […]