Arrays Ruby中的CoderByte数组加法I-工作代码和非工作代码之间的差异
这是针对CoderByte提出的阵列添加问题: 使用函数Arrays Ruby中的CoderByte数组加法I-工作代码和非工作代码之间的差异,arrays,ruby,addition,Arrays,Ruby,Addition,这是针对CoderByte提出的阵列添加问题: 使用函数ArrayAdditionI(arr)获取存储在arr中的数字数组,如果数组中的任何数字组合相加等于数组中的最大数字,则返回字符串true,否则返回字符串false 例如:如果arr包含[4,6,23,10,1,3]则输出应返回true,因为4+6+10+3=23。数组不会为空,不会包含所有相同的元素,并且可能包含负数 我想知道为什么会这样: def ArrayAdditionI(arr) sum = [] largest = ar
ArrayAdditionI(arr)
获取存储在arr中的数字数组,如果数组中的任何数字组合相加等于数组中的最大数字,则返回字符串true,否则返回字符串false
例如:如果arr
包含[4,6,23,10,1,3]
则输出应返回true,因为4+6+10+3=23
。数组不会为空,不会包含所有相同的元素,并且可能包含负数
我想知道为什么会这样:
def ArrayAdditionI(arr)
sum = []
largest = arr.sort!.pop
1.upto(arr.count) do |i|
arr.combination(i).to_a.each do |subarr|
sum << subarr.inject(:+)
end
end
sum.include?(largest)
end
或者为什么这不会:
def ArrayAdditionI(arr)
1.upto(arr.count) do |i|
arr.combination(i).to_a.each do |subarr|
return true if arr.sort!.last == subarr.inject(:+)
end
end
false
end
def ArrayAdditionI(arr)
sorted_arr = arr.sort
1.upto(arr.count) do |i|
arr.combination(i).to_a.each do |subarr|
return true if sorted_arr.last == subarr.inject(:+)
end
end
false
end
我想强调代码之间的一些关键点和差异。在有效的代码中,一个空数组被分配给“sum”。数组中最大的数字被分配给变量“maximust”。要检查最大的数字是否等于任何一个和,调用.include?
方法。我想通过排序和调用数组中的最后一个整数,尝试从块中访问最大的整数,但这似乎不起作用
我试过口头测试用例,但我似乎不知道代码出了什么问题。有什么隐含的东西我只是不了解吗?有一点很重要,那就是在进行比较之前删除数组中最大的元素 请注意,在工作代码中,这发生在迭代之前:
largest = arr.sort!.pop
pop是一种破坏性的方法;它将更改arr
的值
在您的尝试中,每次的结果都是true
。我怎么知道?当i
为1时,组合(i)
将是长度为1的数组。实际上,原始数组中的每个元素都将与最大值进行比较。如果最大元素仍包含在数组中,则在某个时候您将运行:
return true if <maximum> == [<maximum>].inject(:+)
如果==[]返回true。注入(:+)
这永远都是事实 有一点很重要,那就是在进行比较之前删除数组中最大的元素 请注意,在工作代码中,这发生在迭代之前:
largest = arr.sort!.pop
pop是一种破坏性的方法;它将更改arr
的值
在您的尝试中,每次的结果都是true
。我怎么知道?当i
为1时,组合(i)
将是长度为1的数组。实际上,原始数组中的每个元素都将与最大值进行比较。如果最大元素仍包含在数组中,则在某个时候您将运行:
return true if <maximum> == [<maximum>].inject(:+)
如果==[]返回true。注入(:+)
这永远都是事实 大坝!这帮了大忙!非常感谢@max!大坝!这帮了大忙!非常感谢@max!