Tag: hash

在将XML转换为Ruby哈希时保持属性

我有一个我想要解析的大型XML文档。 在本文档中,许多标签具有不同的属性。 例如: Do Re Mi 目前,我通过要求’active_support/core_ext/hash’来使用Rail的散列解析库。 当我将其转换为哈希时,它会删除属性。 它返回: {“album”=>{“song-name”=>”Do Re Mi”}} 如何维护这些属性,在本例中为type=”published”属性? 这似乎之前曾在“ 如何使用from_xml转换为哈希值时使用XML属性? ”中提出这个问题,但是没有确定的答案,但这是从2010年开始的,我很好奇自那时以来情况是否发生了变化。 或者,我想知道您是否知道解析此XML的另一种方法,以便我仍然可以包含属性信息。

如何在散列数组中找到由多个键分组的最大值?

有这种结构的数据。 将按’c’按升序排列。 [ { ‘a’ => 1, ‘b’ => 1, ‘c’ => 1, ‘d’ => ‘?’ }, { ‘a’ => 1, ‘b’ => 1, ‘c’ => 2, ‘d’ => ‘?’ }, { ‘a’ => 1, ‘b’ => 1, ‘c’ => 3, ‘d’ => ‘?’ }, { ‘a’ => 1, ‘b’ => 2, ‘c’ => 4, […]

溅上哈希

哈希上的splat将其转换为数组。 [*{foo: :bar}] # => [[:foo, :bar]] 是否有一些隐藏的机制(如隐式类转换)在这里,或者它是一个内置的原始function? 除了一个数组,在Ruby 1.9下使用splat运算符消失/改变的唯一内容是nil和hash吗?

如何压缩哈希,使每个键成为唯一值?

我想采用嵌套哈希和数组的哈希,并将其展平为具有唯一值的单个哈希。 我一直试图从不同的角度来解决这个问题,但随后我会让它变得比它需要的更复杂,让自己迷失在正在发生的事情中。 示例源哈希: { “Name” => “Kim Kones”, “License Number” => “54321”, “Details” => { “Name” => “Kones, Kim”, “Licenses” => [ { “License Type” => “PT”, “License Number” => “54321” }, { “License Type” => “Temp”, “License Number” => “T123” }, { “License Type” => “AP”, “License Number” => “A666”, “Expiration Date” => “12/31/2020” […]

Ruby数组上未定义的方法’to_h’

根据Ruby Array文档 ,只要数组的每个元素是另外两个元素的数组,就有一个方法to_h可用于将数组转换为哈希。 以下示例来自相同的文档 p [[:foo, :bar], [1, 2]].to_h 但是,当我运行上面的代码时,我收到此错误: irb(main):001:0> p [[:foo, :bar], [1, 2]].to_h NoMethodError: undefined method `to_h’ for [[:foo, :bar], [1, 2]]:Array from (irb):1 from E:/RubyInstall/bin/irb:12:in `’ irb(main):002:0> 我的Ruby版本是 C:\>ruby -v ruby 2.0.0p247 (2013-06-27) [x64-mingw32] 我想使用这种技术来回答Stackoverflow上的另一个问题,但是现在我被困住了,因为Ruby的文档function对我不起作用。

有人可以解释为什么这种迭代嵌套数据结构的方式确实有效吗?

我想创建这个数组 [“studies”, “theory”, “form”, “animal”, “basic”, “processes”] 从以下嵌套数据结构(存储为sorted_hash ): [[“studies”, {:freq=>11, :cap_freq=>0, :value=>11}], [“theory”, {:freq=>9, :cap_freq=>1, :value=>11}], [“form”, {:freq=>9, :cap_freq=>1, :value=>11}], [“animal”, {:freq=>12, :cap_freq=>0, :value=>12}], [“basic”, {:freq=>10, :cap_freq=>1, :value=>12}], [“processes”, {:freq=>13, :cap_freq=>0, :value=>13}]] 我把它混淆为哈希并编写以下代码来实现我的任务: sorted_hash.each do |key,value| array.push key end 我真的得到了我想要的东西。 但经过一些思考和在Pry玩耍后,我想知道为什么。 each方法Ruby Doc for Arrays仅显示带有一个项变量的示例,如 each { |item| block } → ary 但我使用两个变量,就像我为哈希所做的那样。 Ruby会尝试匹配给定的项变量,在这种情况下成功,因为第二级数组的长度为2吗? […]

Rails 3.1 hash每个都给出TypeError

我有哈希(Hash.from_xml)看起来像这样(来自inspect): { “FileName”=>”hofplayers.xml”, “Version”=>”1.0”, “UserID”=>”3955847”, “FetchedDate”=>”2011-08-16 00:41:02”, “PlayerList”=>{ “Player”=>{ “PlayerId”=>”92121587”, “FirstName”=>”Gennady”, “NickName”=>nil, “LastName”=>”Buzykin”, “Age”=>”45”, “NextBirthday”=>”2011-09-24 22:10:00”, “ArrivalDate”=>”2008-03-08 16:37:00”, “ExpertType”=>”15”, “HofDate”=>”2010-01-23 16:10:00”, “HofAge”=>”40” } } } 然后我正在迭代每个,因为可以有多个玩家: 并且它因TypeError而失败:无法将String转换为Integer 。 但是当有多个玩家时,它就像我想要的那样。 问题似乎是当有单个玩家各自制造数组而不是散列时,player.inspect给出: [“PlayerId”, “92121587”] [“FirstName”, “Gennady”] [“NickName”, nil] [“LastName”, “Buzykin”] [“Age”, “45”] [“NextBirthday”, “2011-09-24 22:10:00”] [“ArrivalDate”, “2008-03-08 16:37:00”] [“ExpertType”, “15”] [“HofDate”, “2010-01-23 16:10:00”] [“HofAge”, “40”] 代替 { […]

使用可选的第一个哈希参数和keyword_args的奇数方法行为

我有以下方法: def test(first_param = nil, keyword_arg: nil) puts “first_param: #{first_param}” puts “keyword_arg: #{keyword_arg}” end 以下所有调用都按我的预期执行: test(:something) #=> first_param: something # keyword_arg: test(nil, keyword_arg: :keyword_arg) #=> first_param: # keyword_arg: keyword_arg test({ first_param: :is_a_hash }, keyword_arg: :is_still_working) #=> first_param: {:first_param=>:is_a_hash} # keyword_arg: is_still_working 但是省略可选的keyword_arg并将散列作为第一个参数传递给我一个错误: test(first_param: :is_a_hash) #=> test.rb:1:in `test’: unknown keyword: first_param (ArgumentError) # from test.rb:12:in `’ […]

rails / ruby​​使用相同的键,不同的值合并两个哈希值

我有两个哈希,我想合并。 它们看起来像这样: [{“Hello”->”3″},{“Hi”->”43″},{“Hola”->”43″}] 第二个哈希看起来像: [{“Hello”->”4″},{“Hi”->”2″},{“Bonjour”->”2″}] 我想合并这两个哈希数组,以便结果如下: [{“Hello”->[{value1=>3},{value2=>4}],{“Hi”->[{value1=>43},{value2=>2}]},{“Bonjour”->[{value1=>0},{value2=>2}]},{“Hola”->[{value1=>43},{value2=>0}]] 是否有一种简单的方法来合并这两个哈希值,还是我必须单独遍历哈希值并在另一个哈希值中找到该键?

Ruby:在每个之间选择,map,inject,each_with_index和each_with_object

当我多年前开始编写Ruby时,我花了一些时间来理解每个和地图之间的区别。 当我发现所有其他Enumerable和Array方法时,情况会变得更糟。 在官方文档和许多 StackOverflow 问题的帮助下,我慢慢开始了解这些方法的作用。 以下是让我更长时间理解的内容: 我为什么要使用一种方法? 有没有指导方针? 我希望这个问题不是重复的:我对“为什么?”更感兴趣。 比“什么?” 或“如何?”,我认为它可以帮助Ruby新人。