2016-04-14 50 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]