首页 > 解决方案 > 如何解析列表中的两个元素以创建一个新元素

问题描述

我在 1850 个文件中重复了这个输入:

[
    {
        "id"=>66939,
        "login"=>"XXX", 
        "url"=>"https://website.com/XX/users/XXX"
    },
    ... 
    {}
]

我想通过查找登录名来创建一个列表,我可以使用如下语法检索 ID:

users_list[XXX]

这是我想要的输出:

{"XXX"=>"66570", "XXX"=>"66570", "XXX"=>"66570", "XXX"=>"66570", ... }

我的代码是:

i2 = 1
while i2 != users_list_raw.parsed.count
  temp_user = users_list_raw.parsed[i2]
  temp_user_login = temp_user['login']
  temp_user_id = temp_user['id']
  user = {
    temp_user_login => temp_user_id
  }
  users_list << user
  i2 += 1
end

我的输出是:

[{"XXX":66570},{"XXX":66569},{"XXX":66568},{"XXX":66567},{"XXX":66566}, ... {}]

但这不是我想要的。

我的代码有什么问题?

标签: ruby

解决方案


hash[key] = value在哈希中添加一个条目。所以我猜你的情况users_list[temp_user_login] = temp_user_id

但我不确定你为什么要这样做。我认为您可以通过使用以下语句登录来查找用户的 ID:

login = XXX
user = users_list.select {|user| user["login"] == login}.first
id = user["id"]

也许把它放在一个get_id(login)以登录名作为参数的函数中?

此外,如果您要像这样操作大量数据,您可能需要查看数据库。ORM(对象关系映射器)在 Ruby 中可用,例如 Data Mapper 和 Active Record(与 Rails 捆绑在一起),它们允许您“建模”数据并从存储在数据库中的数据创建 Ruby 对象,而无需手动编写 SQL 查询.


推荐阅读