我需要计算两个数组都具有的值的数量。
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] 问题是什么?
答案 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