Ruby注入条件

问题描述 投票:0回答:1

我有一个充满哈希的阵列。数据结构如下所示:

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
}

有没有办法把条件放入方法中,还是应该找到一种不同的解决方法?

ruby
1个回答
0
投票

我赞扬你在发布之前尝试解决这个问题,但是你让它变得不必要地复杂化了。我写的是这样的:

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

这就是全部,不需要inject。你在这里滥用它。

Ruby集合有很多有用的方法。如果你发现自己使用的是injecteach,那么90%的时间都有更好的方法。

Explanation:

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

Documentation

© www.soinside.com 2019 - 2024. All rights reserved.