2016-04-14 72 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 

像這樣簡單。我試圖合併這兩個數組並顯示結果。我也是Ruby的全新品牌。這是我用這種語言編寫的第一個函數。試圖在這裏學習。另外我怎樣才能刪除重複?Ruby代碼合併兩個不能正常工作的數組

+1

忽略重複值@大衛的回答很可能是被選擇的一個很好的候選人,但爲什麼在世界上,你會做你的選擇如此之快?這樣做可能會阻礙其他答案,對於那些仍然在準備答案的人(不是我)可能不會特別考慮。沒有急於獎勵綠黨。許多人在選擇前至少等待幾個小時。 –

+0

好點。感謝您的評論。一旦我解決了問題,我通常會關閉我的主題。從來沒有想過這個。 :) –

回答

4

如果您給出示例輸入和輸出,這將有所幫助,所以我們確切知道您想要什麼。如果你用的是「合併」,我覺得你其實只是想數組相加:

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

現在,如果你想刪除重複,使用Array#uniq

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

你是什麼意思'不工作'?

類似的問題已經在這裏問: Array Merge (Union)

你有兩個選擇:管道運營商(a1 | a2)或連接,和uniq的((a1 + a2).uniq)

另外要小心使用<<,這樣會將修改爲原始變量,將ar2連接到原始ar1的末尾。

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方法將返回一個新的Array,在您的案例中您將分配給resultflatten!會將self放平,改變它所調用的任何數組,而不是返回一個新數組。

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

p nums1.concat(nums2).uniq 
+1

Ruman是「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]