【问题标题】:How to save an array of information coming from a hash in Ruby如何在 Ruby 中保存来自哈希的信息数组
【发布时间】:2013-06-19 14:56:03
【问题描述】:

我是 ruby​​ 新手,对哈希没有太多经验,我有一个名为 tweets 的变量,它就是这样的哈希:

{"statuses"=>[{"metadata"=>{"result_type"=>"recent", "iso_language_code"=>"tl"}, "lang"=>"tl"}]}

我想将信息数组保存为数组中的单独变量。我该怎么办?

【问题讨论】:

  • 这个数组应该是什么样子的?
  • 应该是这样的:[{"metadata"=>{"result_type"=>"recent", "iso_language_code"=>"tl"}, "lang"=>"tl"}]
  • 我认为你应该考虑将整体扁平化成另一个..这将比数组更简单..
  • 如何做到这一点?
  • 你的意思是:new_array = tweets['statuses'].dup? (dup 以确保 new_array 不会因对 tweets 的更改而改变)

标签: ruby arrays hash


【解决方案1】:

Hash 有 2 个非常好的方法,

hash.values
hash.keys

在你的情况下 -

h = {"statuses"=>[{"metadata"=>{"result_type"=>"recent", "iso_language_code"=>"tl"}, "lang"=>"tl"}]}
p h.values
p.keys

每种类型的这些输出数组。这可能就是你想要的。

此外,这个问题很可能会被关闭。 1 Google 搜索报告了几个 Hash to Array SO 问题。

Ruby Hash to array of values
Converting Ruby hashes to arrays

【讨论】:

  • hash.values 不起作用,因为它创建了一个新的数组数组。我不能有额外的数组
【解决方案2】:

如果你有这样的哈希:

hash = {:numbers => [1,2,3,4]}

您需要将数组捕获到一个新变量中。您可以访问密钥并将其分配给一个新变量,如下所示:

one_to_five = hash[:numbers]

但是,请注意,新变量实际上保存了散列中的数组。所以改变哈希数组会改变新变量的数组。

hash[:numbers] << 6
puts one_to_five #=> [1,2,3,4,5,6]

如果您使用dup,它将创建数组的副本,因此它将是两个单独的数组。

one_to_five = hash[:numbers].dup
hash[:numbers] << 6
puts one_to_five #=> [1,2,3,4,5]

所以,在你的情况下:

hash = {'statuses' => [{"metadata"=>{"result_type"=>"recent", "iso_language_code"=>"tl"}, "lang"=>"tl"}]}
new_array = hash['statuses'].dup

但是,看看你希望用你的代码完成什么,或者至少获得更多的上下文会很有趣,因为这可能不是你最终目标的最佳方法。您可以使用 ArraysHashes(和 Enumerable)做很多事情,我建议您通读有关它们的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2014-05-29
    • 2014-05-11
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    相关资源
    最近更新 更多