2016-04-14 6 views
0
nums1 = Array[1, 2, 3, 4, 5] 
nums2 = Array[5, 6, 7, 8, 9] 

def mergeArrays (ar1, ar2) 
    result = (ar1 << ar2).flatten! 

    require 'pp' 
    pp %w(result) 
end 

このように簡単です。私はこれらの2つの配列をマージし、結果を表示しようとしています。私はRubyのブランドブランドも新しくなっています。これは私がこの言語で書いている最初の機能です。ここで学びようとしています。重複を削除するにはどうしたらいいですか?2つの配列をマージするRubyコード

+1

を使用して、重複した値がうまく選択するための良い候補かもしれないが、世界であなたが作るだろう、なぜ無視することができますあなたの選択はとても速いですか?そうすることは、他の回答を妨げる可能性があり、回答をまだ準備していない(私ではない)人に特に配慮していない可能性があります。緑茶を授与するために急いではありません。ここにいる多くの人は、選択をする前に最低2時間待っています。 –

+0

良い点。コメントありがとう。私は通常、問題が終了するとすぐにトピックを閉じます。これについては決して考えなかった。 :) –

答えて

4

入力と出力の例を挙げて、われわれが望むものを正確に把握するのに役立ちます。あなたが単語「マージ」を使用すると、私はあなたが実際には配列を一緒に追加したいと思う:あなたは、重複を削除Array#uniqを使用したい場合は

ar1 = [1, 2, 3] 
ar2 = [3, 4, 5] 
ar3 = ar1 + ar2 # => [1, 2, 3, 3, 4, 5] 

は今:

ar4 = ar3.uniq # => [1, 2, 3, 4, 5] 

必要はありませんRubyのArrayクラスがすでにサポートしているので、これを行うためのメソッドを書くことができます。アレイでもっと多くのことを学ぶには、documentation of the Array classを見てください。

+0

どうすれば結果を印刷できますか? –

+0

'puts ar4'または' p ar4'を使うことができます。後者は 'puts ar4.inspect'のショートカットです。 –

2

「働いていない」とはどういう意味ですか?あなたは2つのオプションがあり Array Merge (Union)

:パイプ演算子(a1 | a2)をまたは連結-と-uniqの((a1 + a2).uniq)

同様の質問はここに求められています。

また、<<を使用する場合は注意してください。を変更し、元のar1の末尾にar2を連結します。

nums1 = Array[1, 2, 3, 4, 5] 
nums2 = Array[5, 6, 7, 8, 9] 
result = (nums1<< nums2).flatten! 

nums1 
=> [1, 2, 3, 4, 5, 5, 6, 7, 8, 9] 
nums2 
=> [5, 6, 7, 8, 9] 
result 
=> [1, 2, 3, 4, 5, 5, 6, 7, 8, 9] 

Additionally-ちょうど別のRubyの先端には、定期的にflatten!で破壊的なflatten!を必要としません。通常のflattenメソッドは、あなたのケースでresultに割り当てる新しい配列を返します。 flatten!は、新しい配列を返すのではなく、呼び出された配列を変更して、selfを平らにします。

1
nums1 = Array[1, 2, 3, 4, 5] 
nums2 = Array[5, 6, 7, 8, 9] 

p nums1.concat(nums2).uniq 
+1

ルーマンは「Rubyの新しいもの」なので、少なくとも[Array#concat](http://ruby-doc.org/core-2.2.0/Array.html#method -i-concat)と[Array#uniq](http://ruby-doc.org/core-2.2.0/Array.html#method-i-uniq)を見つけることができます。中間配列 'nums1'( 'num1'ではなく)、[Kernel #p](http://ruby-doc.org/core-2.2.0/Kernel.html#method-ip)を使って何が印刷されているかを表示します。これは 'nums1'を変更することにも注意してください。 –

1

あなたは'+'演算子を使用して配列をマージすることができますし、デビッドの答え@.uniq

>> nums1 = Array[1, 2, 3, 4, 5] 
=> [1, 2, 3, 4, 5] 
>> nums2 = Array[5, 6, 7, 8, 9] 
=> [5, 6, 7, 8, 9] 

>> def mergeArrays (nums1, nums2) 
>> result = (nums1 + nums2).uniq 
>> end 
=> :mergeArrays 

>> mergeArrays(nums1,nums2) 
=> [1, 2, 3, 4, 5, 6, 7, 8, 9] 
関連する問題