2016-04-14 9 views
0

配列のすべての要素が等しく、"yes"の場合、trueを返すメソッドが必要です。私は1つの配列["yes", "yes", "yes"]を持っています。すべての要素は同じ"yes"です。私はそれがtrueを返すようにします。 ["no", "no", "no"]の場合、すべての要素は"no"ですが、値は"yes"と等しくありません。どうやってやるの?配列のすべての要素が特定の値であるかどうかをチェックする方法?

def self.all_equal?(array) array.max == array.min end 

を、それは["no", "no", "no"]ためtrueを返します。

私はこれを確認するには、このメソッドを使用しています。

+0

を再現することはできません。あなたのコードは構文的にも有効ではありません。 – sawa

答えて

3
def self.all_equal_to_yes? array 
    array.all? { |x| x == "yes" } 
end 

これは空の配列に対してtrueを返します。その場合にはfalseを返すようにしたい場合は、FixerRBの答えを使用してください。私はまた、all_equal_to_yes?という名前を使用しています。それは、メソッドがちょうどall_equal?より明示的にやっていることになります。あなたはまた、より一般的な方法を定義することができます。その後、

def self.all_equal_to?(array, value) 
    array.all? { |x| x == value 
end 

そしてそうのようにそれを呼び出すことができる:

$ Foo.all_equal_to? ["no", "no", "no"], "yes" 
#=> false 
$ Foo.all_equal_to? ["no", "no", "no"], "no" 
#=> true 

(あなたが上でこのメソッドを定義しているものは何でもクラスでFooを交換してください)

+1

コメントのないdownvoteとは何ですか? –

+1

尋ねられなかった質問に対する回答と、最初に質問を誤読したという発言の両方を削除する必要があります。それはすべて超過手荷物です。 –

+0

私はそれに同意することができます。私は命名を残すつもりですが、貧弱な命名が私に質問を誤解させた原因となっているので、余分な手荷物は考慮しません(それはサワが修正する前の悪いオリジナルタイトルです)。 –

0

現在のメソッドは、配列のすべての要素が等しいかどうかをチェックするだけです。それらがすべて"yes"に等しいことも確認したい場合は、これを明示的にチェックする必要があります。

def self.all_equal?(array) array.max == array.min && array[0] == "yes" end 
3

これはあなたの問題を解決する必要があります:彼らはすべて同じであるので、そのうちの一つが実際に"yes"であることを確認するのに十分だ

def self.all_equal?(array) 
    array.uniq == ['yes'] 
end 
+0

これは空の配列に対して誤って 'false'を返します。しかし、その問題は必ずしも明らかではありませんでした。 – sawa

1
["yes", "yes", "yes"].grep_v("yes").empty? # => true 
["no", "yes", "yes"] .grep_v("yes").empty? # => false 
["no", "no", "no"] .grep_v("yes").empty? # => false 
関連する問題