问题说:
给定一个整数数组。
返回一个数组,其中第一个元素是正数的计数,第二个元素是负数的和。0既不是正数也不是负数。
如果输入为空数组或为null,则返回空数组。
def count_positives_sum_negatives(last)
pos = []
neg = []
x = lst.each
if x % 2 == 0
pos.push x
else neg.push x
end
y = pos.count
z = neg.sum
puts "[#{y},#{z}]"
end
我用
count_positives_sum_negatives([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15])
#should return [10, -65]
我不确定为什么我的一个只给出一个错误消息:
An error occurred while loading spec_helper.
Failure/Error: if (x % 2) == 0
NoMethodError:
undefined method `%' for #<Enumerator: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]:each>
# ./lib/solution.rb:7:in `count_positives_sum_negatives'
# ./lib/solution.rb:18:in `<top (required)>'
# ./spec/spec_helper.rb:1:in `require'
# ./spec/spec_helper.rb:1:in `<top (required)>'
No examples found.
No examples found.
3条答案
按热度按时间fcg9iug31#
当然,您指的是
lst.each do |x|
而不是x = lst.each
。您会得到这样的错误,因为没有块的lst.each
返回Enumerator
对象,而该对象不响应%
。注意:
x % 2 == 0
可以写成x.even?
但是你看到的是偶数和奇数,你的描述是计数 * 正 * 和求和 * 负 *,你可以使用
#positive?
和#negative?
,沿着#partition
。您也可以使用
#each_with_object
来给予您要寻找的信息。pb3s4cty2#
@Chris已经给出了问题的原因。
我想我会倾向于这样写。
第一个
这有一个缺点,即创建了一个临时数组(
non_pos
),但是lst.size - non_pos.size
和non_pos.sum
都是相对较快的计算,后者是因为它是在C中实现的。lst.reject(&:positive?)
是lst.reject { |n| n.positive? )
的缩写形式。参见数组#reject和数组#sum。
5hcedyr03#
好的,我完成的最后一个输出正确答案,但我认为门户本身已损坏,因为它无法区分[10,-65]与[10,-65] enter image description here相同