Ruby注入条件

时间:2018-07-17 13:33:41

标签: ruby

我有一个充满哈希的数组。数据结构如下:

students = [
  {
    "first_name" => "James",
    "last_name" => "Sullivan",
    "age" => 20,
    "study_results" => {"CAR" => 1, "PR1" => 1, "MA1" => 1, "BEN" => 2, "SDP" => nil}
  }
]

我想从至少两个科目中找到标有1的学生。

我试图将带有标记的哈希转换为数组,然后使用inject方法对1的数量进行计数,并找出数字是否为> 1

students.select{|student
  (
    (student["study_results"].to_a)
    .inject(0){|sum, x| sum += 1 if x.include?(1)}
  ) > 1
}

有什么方法可以将条件放入方法中,还是应该找到其他解决方法?

1 个答案:

答案 0 :(得分:0)

我赞扬您在发布之前尝试解决此问题,但是您使它不必要地复杂。我会这样写:

students.select{|student| student['study_results'].values.count(1) >= 2}

仅此而已,不需要inject。您在这里滥用它。

Ruby集合具有大量有用的方法。如果您发现自己使用的是injecteach,那么有90%的情况会找到更好的方法。

说明:

student['study_results'] # => {"CAR"=>1, "PR1"=>1, "MA1"=>1, "BEN"=>2, "SDP"=>nil}
student['study_results'].values # => [1, 1, 1, 2, nil]
student['study_results'].values.count(1) # => 3
student['study_results'].values.count(2) # => 1
student['study_results'].values.count(3) # => 0
student['study_results'].values.count(nil) # => 1

文档