测试一个数组的元素是否包含在另一个数组中

6

我有以下数组:

passing_grades = ["A", "B", "C", "D"]
student2434 = ["F", "A", "C", "C", "B"]

我需要验证student数组中的所有元素是否都包含在passing_grades数组中。在上面的情况下,student2434将返回false。但是这个学生:

student777 = ["C", "A", "C", "C", "B"]

这段代码会返回true。我尝试了如下代码:

if student777.include? passing_grades then return true else return false end

没有成功。需要任何帮助。

2个回答

9
PASSING_GRADES = ["A", "B", "C", "D"]

def passed?(grades)
  (grades - PASSING_GRADES).empty?
end

类似于CDub所拥有的但没有漏洞。我认为更易读。

有点喜欢这个。让我进行一些测试,看它是否能满足我的需求。 - Mark Locklear

7
你可以创建一个方法来比较两个数组的差异,如果有任何结果存在,则说明未通过:
PASSING_GRADES = ["A", "B", "C", "D"]

def passed?(grades)
  grades.all? {|grade| PASSING_GRADES.include?(grade)}
end

例子:

1.9.3-p484 :117 > student777 = ["C", "A", "C", "C", "B"]
 => ["C", "A", "C", "C", "B"] 
1.9.3-p484 :118 > passed?(student777)
 => true
1.9.3-p484 :118 > passed?(student2434)
 => false

1
“passing_grades - grades” 会返回学生没有得到的任何及格成绩吗?例如,如果学生只得到C,那么这是否会返回false,因为差异包括A、B和D? - Michelle
他的代码只是从“grades”中删除所有存在的对象,并从“PASSING_GRADES”数组中删除。顺便说一下,这包括重复项,因此[1,1,2,1] - [1]得到[2] - Daniël Knippers
1
@Michelle 是正确的 - 我的答案已经被修改。 - CDub
给你点个赞,CDub。代码不错,但Luri的更简洁一些。 - Mark Locklear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接