在ruby中是否有一个数组方法“必须至少包含其中一个,但不能包含任何其他内容”?

时间:2017-03-22 00:59:55

标签: arrays ruby

我正在做一个输入是数组的练习。如果数组包含字符串'n','s','e'和'w'以外的任何内容,或者如果数组不包含任何字符串'n',我需要一种方法返回false, 's','e'和'w'。是否有预先定义的方法?如果没有,怎么办呢?

3 个答案:

答案 0 :(得分:2)

我认为没有你可以使用的内置方法。如果arr是您的数组,则可以执行以下操作。

directions = ['n', 's', 'e', 'w']

arr.any? && (arr-directions).empty?

一些例子:

arr = ['n', 's', 'n']
arr.any? && (arr-directions).empty?
  #=> true

arr = ['n', 's', 'f']
arr.any? && (arr-directions).empty?
    #=> false

arr = ['f', 'g']
arr.any? && (arr-directions).empty?
  #=> false

arr = []
arr.any? && (arr-directions).empty?
  #=> false

答案 1 :(得分:0)

据我所知,没有内置功能。你可以做下面的事情或尝试包括?你的数组上的方法。见http://apidock.com/ruby/Array/include%3F

array.each do |element|
  if element != 'n' && element != 's' && element != 'e' && element != 'w'
    return false
  end
end

return true

这应该遍历数组的每个元素,并将每个元素与“' n'''' e'和' w& #39 ;.如果找到的东西不匹配,则返回false。如果它在没有找到任何异常的情况下完全通过它返回true。您可能还想在开头检查空字符串。

答案 2 :(得分:0)

您可以将grepgrep_v与regex:

一起使用
def news? arr
  r = /[news]/
  !arr.grep(r).empty? && arr.grep_v(r).empty?
end

使用Cary的测试(虽然略有修改):

news? ['n', 's', 'n'] #=> true
news? ['n', 's', 'f'] #=> false
news? ['f', 'g', 'h'] #=> false
news? []              #=> false