【问题标题】:Retrieve data from YAML and convert each value as its own array从 YAML 中检索数据并将每个值转换为自己的数组
【发布时间】:2020-08-26 08:01:55
【问题描述】:

我的 yml 文件中有这个

members: 
  - id: 1
    name: Sam
  - id: 18
    name: tom

在 Rails 应用程序中从此文件中检索数据后,我想将其转换为数组。 例如

id=[1,18]
name=[sam,tom]

我怎样才能做到这一点?

目前这是我检索数据的方式。

yml = YAML.load_file("mem.yml")

这就是我获取数据的方式

[{"id":1, "name":"Sam"},{"id":18, "name":"tom"}]

如果我使用yml["members"][1]["id"],我会得到第一个 ID。

我也试过像下面这样分别写 id 和 name。当我使用yml["id"] 时,这确实给了我想要的东西,但我不想使用它,因为它的可读性。顺便说一句,我的数据是静态的。

id:
 - 1
 - 18
name:
 - Sam
 - tom

【问题讨论】:

  • ids = yml['members'].map { |member| member['id'] } ?

标签: ruby-on-rails ruby yaml


【解决方案1】:

试试下面的:

yml = [{"id":1, "name":"Sam"},{"id":18, "name":"tom"}]

result = {}.tap do |result|
           yml.each do |hash|       # Iterate over array of hashes on parsed input from YAML file
             hash.each do |key, value|      # Iterate over each keys in the hash 
               result[key] ||= []           
               result[key] << value         # Append element in the array
             end
           end
         end

这会将result 作为哈希返回:

{:id=>[1, 18], :name=>["Sam", "tom"]}

您可以访问 ID 和名称

result[:id]   # [1, 18]
result[:name] # ["Sam", "tom"]

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多