返回数组a如果给定的数字在其中,则返回数组a和给定数字(如果不是)

时间:2014-01-12 09:47:03

标签: ruby arrays

这就是我的想法:

def appendUnique(a,x)
    for i in 0 .. a.size-1 do
        if a[i]=x then
            a==a
        else
            a=a+x
        end

        p(a)
    end
end

appendUnique([-1,5,3],4)

将a的每个成员与x进行比较,如果a等于x,则返回a,否则返回a + x。为什么这不起作用?它只是用4s替换所有数组成员...... 我想要这个:结果[-1,5,3,4]来自上面,因为4不在数组中,而[-1,5,3]来自appendUnique([ - 1,5,3],5)。

3 个答案:

答案 0 :(得分:4)

您的代码存在以下问题:

  • 在Ruby中,我们通常使用each代替for来迭代集合
  • a[i] = x作业,您需要a[i] == x
  • a == a只返回true
  • a + x连接两个数组,但x不是数组

我只需使用Array#include?来检查项目是否存在:

def appendUnique(array, item)
  if array.include? item
    array
  else
    array + [item]
  end
end

答案 1 :(得分:1)

如果您想要一个包含唯一元素的数组,可以使用Set class

答案 2 :(得分:0)

  

它只是用4s替换所有数组成员......

a[i]=x是一项任务而非比较。像你一样在循环中运行它会将a的每个元素设置为x(即4)。

其余代码也需要做很多工作。例如:您只应在运行循环后追加到a ,并确定x不在数组中。