Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 红宝石注入条件_Ruby - Fatal编程技术网

Ruby 红宝石注入条件

Ruby 红宝石注入条件,ruby,Ruby,我有一个充满散列的数组。数据结构如下所示: students = [ { "first_name" => "James", "last_name" => "Sullivan", "age" => 20, "study_results" => {"CAR" => 1, "PR1" => 1, "MA1" => 1, "BEN" => 2, "SDP" => nil} } ] students.selec

我有一个充满散列的数组。数据结构如下所示:

students = [
  {
    "first_name" => "James",
    "last_name" => "Sullivan",
    "age" => 20,
    "study_results" => {"CAR" => 1, "PR1" => 1, "MA1" => 1, "BEN" => 2, "SDP" => nil}
  }
]
students.select{|student| student['study_results'].values.count(1) >= 2}
我想从至少两门学科中找到分数
1
的学生

我尝试将带有标记的散列转换为数组,然后使用
inject
方法计算
1
的数量,并确定该数字是否为
>1

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

有没有办法在方法中加入一个条件,或者我应该找一个不同的方法来解决它?

我建议您在发布之前尝试解决这个问题,但是您使它变得不必要的复杂。我会这样写:

students = [
  {
    "first_name" => "James",
    "last_name" => "Sullivan",
    "age" => 20,
    "study_results" => {"CAR" => 1, "PR1" => 1, "MA1" => 1, "BEN" => 2, "SDP" => nil}
  }
]
students.select{|student| student['study_results'].values.count(1) >= 2}
仅此而已,无需
inject
。你在这里用错了

Ruby集合有很多有用的方法。如果您发现自己在使用
inject
each
,有一种更好的方法,90%的时间都是这样

说明: 文档