要将数组转换为字符串,我使用了Array#join
,并在
字符串的开头,第一个引号和第一个单词。我不明白为什么会这样。
我与String#strip
解决,但我想了解
def order(words)
arr_new = []
arr = words.split(" ")
nums = ["1","2","3","4","5","6","7","8","9"]
arr.each do |word|
nums.each do |num|
if word.include? num
arr_new[num.to_i] = word
end
end
end
arr_new.join(" ").strip
end
order("is2 Thi1s T4est 3a")
没有.strip的输出是:
" Thi1s is2 3a T4est"
.strip之后:
"Thi1s is2 3a T4est"
答案 0 :(得分:5)
看到额外空间的原因是因为ruby中的数组被索引为0,所以您拥有nil数组元素,因为您的第一个插入是索引1
x = []
x[1] = "test"
这样创建一个数组:
[
nil,
"test"
]
如果您创建了一个名为x
的空数组并分配了x[10] = "test"
,则您将有10个nil值,并且数组中的单词“ test”。
因此,在加入之前,您的数组实际上是:
[nil, "Thi1s", "is2", "3a", "T4est"]
您有两种选择:
compact
(这将删除nil)strip
我建议使用compact
,因为它可以解决一些边缘情况(例如您的数字中的“空白”)。
答案 1 :(得分:0)
@Jay's explanation确实是正确的。
我只是建议您使用一个更干净的代码,而不会出现相同的问题。
这假设1-9的顺序不是动态的。例如,如果您想按随机字符排序,则Aka无效。
def order(words)
words.split.sort_by { |word| word[/\d/].to_i }.join ' '
end