我遇到了这个反转字符串的迭代器。我试图将其分解以理解它在做什么,但似乎没有进一步发展。
2.0.0-p643 :053 > s1 = "reverse"
=> "reverse"
2.0.0-p643 :054 > (0...(s1.length/2)).each {|i| s1[i],s1[s1.length-i-1]=s1[s1.length-i-1],s1[i]}
=> 0...3
2.0.0-p643 :055 > s1
=> "esrever"
有人可以帮我分解迭代的每个部分吗?
2.0.0-p643 :056 > (0...(s1.length/2))
=> 0...3
第一个对象只给我0..3。它是如何迭代整个单词的?
为什么在迭代中你需要两次s1 [i]?
答案 0 :(得分:1)
这并不是那么复杂 - 大多数只是被格式化所掩盖。如果你在多行上写出来,它看起来像这样:
(0...(s1.length/2)).each do |i|
s1[i], s1[s1.length-i-1] = s1[s1.length-i-1], s1[i]
end
如果您对多项作业不满意,可以使用临时变量进一步细分:
(0...(s1.length/2)).each do |i|
temp = s1[i]
s1[i] = s1[s1.length-i-1]
s1[s1.length-i-1] = temp
end
它正在迭代左半部分,并用右半部分中的相应字符交换每个字符(第一个带有最后一个,第二个带有倒数第二个等)。