0

我对 Ruby 完全陌生。我在变量“@member”中有这些数据

 [{"clicks"=>"1", "member"=>{"email"=>"abc@gmail.com", "id"=>"f6d02be6", "euid"=>"f02be6", "email_type"=>"html", "ip_signup"=>nil, "leid"=>"3223865", "clients"=>[], "static_segments"=>[], "notes"=>[]}}, {"clicks"=>"1", "member"=>{"email"=>"dft@gmail.com", "id"=>"336ed115c4", "euid"=>"3365c4", "email_type"=>"html", "ip_signup"=>nil, "timestamp_signup"=>nil, "ip_opt"=>nil, "leid"=>"14877", "clients"=>[], "static_segments"=>[], "notes"=>[]}}, {"clicks"=>"2", "member"=>{"email"=>"man8@gmail.com", "id"=>"334a7f", "euid"=>"334617", "email_type"=>"html", "ip_signup"=>nil, "leid"=>"377", "clients"=>[], "static_segments"=>[], "notes"=>[]}}, {"clicks"=>"1", "member"=>{"email"=>"sub60@gmail.com", "id"=>"4e9b7", "euid"=>"4e9b7", "email_type"=>"html", "ip_signup"=>nil, "timestamp_signup"=>nil, "ip_opt"=>nil, "leid"=>"4605", "clients"=>[], "static_segments"=>[], "notes"=>[]}}, {"clicks"=>"1", "member"=>{"email"=>"mail@moll.com", "id"=>"083fd3", "euid"=>"083fd3", "email_type"=>"html", "ip_signup"=>nil, "timestamp_signup"=>nil, "ip_opt"=>nil, "leid"=>"314649", "clients"=>[], "static_segments"=>[], "notes"=>[] }}] 

我需要从上述数据中获取成员电子邮件、euid 和 leid 到结构/哈希数组中。

我试着做

@emails = @member.map { |x| x['member']['email']['euid']['leid'] }

但它返回零。

任何人都可以帮助如何做到这一点?

如果它太基本,但我无法解决它,请原谅。

4

4 回答 4

4

要将字段作为数组获取:

@member.map { |m| m["member"].values_at('email','euid','leid') }
#=> [["abc@gmail.com", "f02be6", "3223865"], ["dft@gmail.com", "3365c4", "14877"], ["man8@gmail.com", "334617", "377"], ["sub60@gmail.com", "4e9b7", "4605"], ["mail@moll.com", "083fd3", "314649"]]

或作为哈希:

@member.map { |m| m["member"].select { |k, v| ['email','euid','leid'].include? k } }
#=> [{"email"=>"abc@gmail.com", "euid"=>"f02be6", "leid"=>"3223865"}, {"email"=>"dft@gmail.com", "euid"=>"3365c4", "leid"=>"14877"}, {"email"=>"man8@gmail.com", "euid"=>"334617", "leid"=>"377"}, {"email"=>"sub60@gmail.com", "euid"=>"4e9b7", "leid"=>"4605"}, {"email"=>"mail@moll.com", "euid"=>"083fd3", "leid"=>"314649"}]

顺便说一句,您应该命名该变量@members(复数)。

于 2013-10-17T06:42:37.983 回答
0

你应该像这样使用并将它放到你的数组中

@emails = @member.map { |x| x['member']['email'], x['member']['euid'], x['member']['leid'] }

因为x['member']['email']['euid']不一样x['member']['euid']

于 2013-10-17T06:23:23.187 回答
0
@data = @member.map{|x| {'email' => x['member']['email'], 'euid' => x['member']['euid'], 'leid' => x['member']['leid']} }
于 2013-10-17T06:37:04.977 回答
0

既然您的问题已经得到解答,我想就向 SO 发布问题提供一些建议。通常注释用于建议,但由于格式限制,在这种情况下不起作用。这是您可能提出问题的一种方式:


我有以下数组:

@members = [ \
  {"clicks"=>"1", \
    "member"=>{"email"=>"abc@gmail.com", "euid"=>"f02be6", "leid"=>"3"}}, \
  {"clicks"=>"1", \
    "member"=>{"email"=>"dft@gmail.com", "ip_signup"=>nil, "leid"=>"14877"}}, \
  {"clicks"=>"2", \
    "member"=>{"email"=>"man8@gmail.com", "euid"=>"334617", "leid"=>"377"}}]

我只想提取键email和的哈希值leid,并将它们放入数组中,如下所示:

member_arr = [["abc@gmail.com", "3"], ["dft@gmail.com", "14877"], \
    ["man8@gmail.com", "leid"=>"377"]]

我是红宝石的新手。我怎样才能做到这一点?


在改写这个问题时,我做了以下事情

  • 将感兴趣的键的数量从 3 个减少到 2 个,并消除了大部分散列元素,以在不简化问题的情况下简化示例。
  • 使用了续行符 ( \) 以便在不水平滚动的情况下可以看到 @members,同时也阐明了 @members 的结构。
  • 准确地解释了我想要实现的目标,并显示了示例输入的所需输出。

另一件事。您在发布问题大约一小时后选择了您喜欢的答案,可能是在阅读适合您的答案后。通过等待更长的时间——至少几个小时——通常会得到更好和/或更多样化的答案。您可以通过将鼠标光标放在复选标记上来查看何时选择了答案。看看其他 SO 问题。

于 2013-10-17T18:24:05.080 回答