在Ruby中获取两个数组中相同元素的数量

时间:2015-12-04 23:05:40

标签: ruby-on-rails arrays ruby

我需要计算两个数组都具有的值的数量。

def process_2arrays(arr1, arr2)
  length1 = arr1.count
  length2 = arr2.count
  arr3 = []
  i = 0
  while length1 >= i do
    ci = arr1[i]
    if arr2.include?(ci)
      arr3 << ci
      damn = arr3.count 
      i = i + 1
    end 

    return [(damn), (2), (3), (4)]
  end
end

当我将值传递给函数时,它返回[nil,2,3,4] 问题是什么?

2 个答案:

答案 0 :(得分:4)

要查找两个数组中存在的元素,请使用set intersection方法YYYYMMDD

http://ruby-doc.org/core-2.2.0/Array.html#method-i-26

&

实施例

def count_same_elements(a1,a2)
    (array1 & array2).length
end

答案 1 :(得分:3)

for(i=0; i < MAX_CLASS_SIZE; i++) { char buf[200]; if (fgets(buf, sizeof buf, fp) == NULL) break; int n = 0; sscanf(buf, fp, " %[^,],%f ,%f ,%f ,%f ,%f %n", name[i], &w[i], &q[i], &t[i], &p[i], &e[i], &n); if (n > 0) break; // format error if (buf[n]) break; // extra text // Use name[i], w[i], q[i], t[i], p[i], e[i] } damn块内初始化,特别是while块。因此,它的值将存在于该范围内,当您在块外调用变量时,其值为do .. end

如果要保留该值,则必须将该变量初始化为块外的nil。

nil

作为旁注,您的代码缺少最基本的Ruby标准。在Ruby中,您通常使用迭代器,而不是while。而且,你不能在方法结束时使用回报。

这是使用迭代器在Ruby中编写方法并利用核心库中的一些方法的方法。

i = 0
damn = nil
...

完全改变方法,你可以使用

def process_2arrays(arr1, arr2)
  arr3 = arr1.select { |e| arr2.include?(e) }
  [arr3.size, 2, 3, 4]
end