Arrays Ruby:字符串在数组中显示为字符串
我正在Ruby上做一个pig拉丁语程序,遇到了一些麻烦。 控制台显示此错误Arrays Ruby:字符串在数组中显示为字符串,arrays,ruby,string,Arrays,Ruby,String,我正在Ruby上做一个pig拉丁语程序,遇到了一些麻烦。 控制台显示此错误 提前谢谢 这是因为您正在使用。如果您阅读文档,您可以找到: 返回一个新数组,其中包含每次运行一次块的结果 枚举中的元素 因为返回类型是数组,所以您得到的是数组作为结果,而不是字符串(这里正好是数组的第一个元素) 一个简单的解决方案总是返回数组的第一个元素。您可以通过以下方式实现此目的: str.split.map do |word| if vowels.include?(word[0]) ....
提前谢谢 这是因为您正在使用。如果您阅读文档,您可以找到: 返回一个新数组,其中包含每次运行一次块的结果 枚举中的元素 因为返回类型是数组,所以您得到的是数组作为结果,而不是字符串(这里正好是数组的第一个元素) 一个简单的解决方案总是返回数组的第一个元素。您可以通过以下方式实现此目的:
str.split.map do |word|
if vowels.include?(word[0])
....
else
word
end
end.first # returning the first element of resultant array, nil if none present
您正在使用Array#map
。此方法返回一个数组。由于它是方法translate
的最后一条语句,因此将隐式返回此数组。因此,当您调用该方法时,它将输出一个数组。要解决这个问题,请执行以下操作
str.split.map do |word|
if vowels.include?(word[0])
#...
elsif word[0..2].include?("qu")
#...
end
end.join(' ')
这个
连接(“”)
将每个元素连接成一个字符串,每个元素由一个空格(“”)分隔。这使得该方法的输出成为字符串而不是数组,从而解决了您的问题,同时考虑了大小超过一个元素的数组,而shivam的另一个答案只返回第一个元素。这样可扩展性更强。谢谢您的帮助:)
str.split.map do |word|
if vowels.include?(word[0])
....
else
word
end
end.first # returning the first element of resultant array, nil if none present
str.split.map do |word|
if vowels.include?(word[0])
#...
elsif word[0..2].include?("qu")
#...
end
end.join(' ')