第一组代码工作。
def scramble_string(string, positions)
scrambled=""
idx=0
while idx<string.length
scrambled+=string[positions[idx]]
idx+=1
end
puts scrambled
return scrambled
end它产生了下列投入/产出:
scramble_string("abcd",3,1,2,0) == "dbca“ Scramble_string(“马尔可夫”,5,3,1,4,2,0) == "vkaorm“
另一方面,这第二套不起作用
def scramble_string(string, positions)
scrambled=string
idx=0
while idx<string.length
scrambled[idx]=string[positions[idx]]
idx+=1
end
puts scrambled
return scrambled
end它产生了下列投入/产出:
scramble_string("abcd",3,1,2,0) == "dbcd“ scramble_string("markov",5,3,1,4,2,0) == "vkkokv“
请帮我理解为什么第二盘不能用。
发布于 2017-05-13 21:42:13
在ruby中,字符串是通过引用分配的。那就是,之后
scrambled=string对scrambled的任何更改也将更改string。
如果你用
scrambled=string.dup它为scrambled提供了自己的副本,然后函数将提供相同的输出。
发布于 2017-05-13 21:39:23
因为在第二个scrambled_string方法中,当字符串作为第一个参数传递时,您将初始化scrambled变量,而不是作为空字符串。
def scramble_string(string, positions)
scrambled = ''
idx = 0
while idx < string.length
scrambled[idx] = string[positions[idx]]
idx += 1
end
scrambled
end
p scramble_string('abcd', [3, 1, 2, 0])
# => "dbca"
p scramble_string('markov', [5, 3, 1, 4, 2, 0])
# => "vkaorm"这两种情况都是这样的:
markov markov
v v
markov varkov
k k
markov vkrkov
a k
markov vkkkov
o o
markov vkkoov
r k
markov vkkokv
m v
"vkaorm" "vkkokv"https://stackoverflow.com/questions/43958184
复制相似问题