2017-12-15 17 views
0

同じサイズの2つの配列があります。特定のインデックスの最初の配列よりも大きい2番目の配列の要素があるかどうかを確認するにはどうすればよいですか?この例では:ある配列の要素と別の配列の要素を比較する

a = [2, 8, 10] 
b = [3, 7, 5] 

3は、位置02よりも大きくなります。しかし、以下では:

a = [1, 10] 
b = [0, 8] 

このような要素はありません。指数0では、01以下であり、指数1では810以下である。

+0

出力はどのように表示されますか? – jvillian

+0

それはちょうど真実か偽であるかもしれません –

答えて

5

数が指定されたインデックスでaで数より大きいbにありますならば、これはbに番号を返します。この1

a.each_with_index.any? { |item, index| b[index] > item } 
+0

あなたが持っているか、または 'a.each_index.any? {|索引| b [index]> a [index]} '? –

+0

私はあなたを好む:D – Ursus

+0

@CarySwoveland Yoursも高速です。 –

0

を試してみてください。 bに数字がない場合は、nilが返されます。

b.detect.with_index { |n, index| n > a[index] } 

たとえば、次の配列があるとします。

a = [3, 4, 5] 
b = [6, 7, 8] 

戻り値は6です。

4

インデックスが不要です。ペアリングして各ペアをチェックしてください。

b.zip(a).any? { |x, y| x > y } 
=> true or false 

そして、もう一つのトリッキー:

a.zip(b).map(&:max) != a 
=> true or false 

そして非常に効率的な1(時間と空間の両方):すべての位置で、aが最大であるかどうかを確認してください

b.zip(a) { |x, y| break true if x > y } 
=> true or nil 

true/falseが必要な場合(多くの場合、ifなどの条件には入力しないでください)、!!の前に追加するか、01を追加することができます)

+1

私は「新しい配列は必要ありません」と言うことができました:D – Ursus

+0

@Ursusまあ、「新しい配列が悪いと思う必要はない」とか、「.lazy」をそこに入れることができます:-) –

+0

ここまできれいな答えです。 'b.lazy.zip(a).any? {| x、y | x> y} 'はおそらく少し良いでしょう。 – mudasobwa

関連する問題