我是编程的初学者,我遇到了用ruby解决这个问题:
给定一个包含一些字符串的数组,返回一个包含这些字符串长度的数组。您应该编写一个名为“length_finder”的方法来完成此任务。
我写道:
def length_finder(input_array)
a = [ ]
input_array.each { |n| puts n.length.to_i }
a << n
a
end
我得到一个错误未定义的局部变量或方法`n'。代码有什么问题?
答案 0 :(得分:2)
由于这是一项任务,我不会直接回答您的问题。相反,我会展示类似的东西。假设您要创建一个由给定数组中每个单词的第一个字符组成的数组:
def first_char(x)
x.map {|s| s[0]}
end
y = first_char(["abc", "xyz", "def"]) # y => ["a", "x", "d"]
将s[0]
替换为您的问题的合适操作。
在交互式Ruby环境irb
中尝试这个(以及您自己的方法)。探索是学习的最佳方式之一,irb
使探索变得容易。
答案 1 :(得分:1)
按照您的特定方法,它应该是
def length_finder(input_array)
a = []
input_array.each do |n|
a << n.length
end
a
end
在您的代码中,您在块中定义n
并打印其大小。您不想打印它的大小。你想把它放在a
中。您收到一条错误消息,指出它未定义,因为您正在范围内a << n
。
答案 2 :(得分:0)
首先看一下你的错误,如果你仔细观察,n的范围只在每个块中,但是你试图在它的范围之外使用它,这就是为什么你得到这个错误而第二个错误是在你应该是在输出中附加你想要的n.length,纠正这两个,你就得到了一个有效的代码:
def length_finder(input_array)
a = [ ]
input_array.each { |n| puts n.length.to_i
a << n.length }
a
end
然而,这可以在一行中完成,使用map或inject以及ruby返回函数中最后执行语句的输出这一事实。我会鼓励你尝试一线解决方案。
答案 3 :(得分:0)
您真正需要的只是以下三行代码:
def array_length(input_array)
length = []
input_array.each{ |a| length << a.length}
length
end
答案 4 :(得分:0)
使用Map method of Ruby提供一种班轮解决方案-
def length_finder(input_array)
input_array.map { |s| s.length }
end