Ruby变量在函数中无法正常工作



我有这个函数:

def find_deleted_number(arr, mixed_arr)
default = 0
arr.each do |i|
if mixed_arr.include?(arr[i]) == true
default += arr[i]
else 
return arr[i]
end
end
return default  
end
find_deleted_number([1,2,3,4,5], [3,4,1,5])
#=> 2 (as expected)
find_deleted_number([1,2,3,4,5,6,7,8,9], [1,9,7,4,6,2,3,8])
#=> 5 (as expected)
find_deleted_number([1,2,3,4,5,6,7,8,9], [5,7,6,9,4,8,1,2,3])
#=> nil (expected 45)

这个想法是让函数检查哪个数字在arr中,而不是在mixed_arr中。这一切都很好,但问题是,当两个数组相同时,我希望它给我其中一个数组中每个值的总和(这就是我做default += arr[i]的原因(。但结果是nil,我不太明白为什么。如果可能的话,我想了解它失败的原因。

arr.eacharr的元素上迭代,而不是在索引上迭代。因此,您需要将arr[i]更改为i

完整的答案是:

def find_deleted_number(arr, mixed_arr)
default = 0
arr.each do |i|
if mixed_arr.include?(i)
default += i
else 
return i
end
end
default  
end

正如@yzalavin所说,它失败的原因。

你也可以简化你的代码:

def find_deleted_number(arr, mixed_arr)
return arr.sum if arr.sort == mixed_arr.sort
(arr - mixed_arr).first
end

@Stefan提供了一个更短的一行:

(arr - mixed_arr).first || arr.sum

相关内容

  • 没有找到相关文章

最新更新