【问题标题】:How can I remove hashes from my array?如何从我的数组中删除哈希?
【发布时间】:2018-02-09 09:30:04
【问题描述】:

我有一个哈希数组

@employee_list = [{"id" => 375, "emp_name" => "emp1", "emp_no" => "e1"}, 
                  {"id" => 330, "emp_name" => "emp2", "emp_no" => "e2"}, 
                  {"id" => 38,  "emp_name" => "emp3", "emp_no" => "e3"},
                  {"id" => 49,  "emp_name" => "emp4", "emp_no" => "e4"}]

我想通过删除 "id" 值包含在其中的哈希来过滤它:

@not_active_emp = ["49", "375"]

得到:

@employee_list = [{"id" => 330, "emp_name" => "emp2", "emp_no" => "e2"},
                  {"id" => 38,  "emp_name" => "emp3", "emp_no" => "e3"}]

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 看看Enumerable#reject
  • 我试过像@employee_list.each 那样拒绝|a| a.拒绝 {|k,v| v == not_active_emp[0]} 结束,但它只拒绝那个 'id' 而不是那个 id 的完整哈希
  • @sawa "375", "357"...这是一个错字。
  • @sawa Ockham 的剃刀,仅仅是假设、观察、经验、推理能力、想象力、完全缺乏谦逊......选择你的选择 :)

标签: arrays ruby hash


【解决方案1】:

您可以使用Array#reject。大致思路如下。

@not_active_emp = [49, 375]
@employee_list = [{"id" => 375, "emp_name" => "emp1", "emp_no" => "e1"}, 
                  {"id" => 330, "emp_name" => "emp2", "emp_no" => "e2"}, 
                  {"id" => 38,  "emp_name" => "emp3", "emp_no" => "e3"},
                  {"id" => 49,  "emp_name" => "emp4", "emp_no" => "e4"}]

@employee_list.reject { |hash| @not_active_emp.include? hash['id'] } 
  # => [{"id" => 330, "emp_name" => "emp2", "emp_no" => "e2"},
  #     {"id" => 38,  "emp_name" => "emp3", "emp_no" => "e3"}]

【讨论】:

  • 您正在回答不同的问题。不仅@not_active_emp@employee_list也不同。
  • @sawa 我有一定数量的合理“自动更正”。由于我已经在我的答案中声明了更新数组并将其用于我的解决方案,我认为这没关系。 OP 似乎很高兴,我希望这是最重要的总体思路。
猜你喜欢
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2018-07-27
  • 2015-08-20
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多