过去两个月我一直在制作小型课程,同时还在线学习一些课程,以帮助我学习编码。它一直很顺利,我觉得我要问的问题比我写的一些东西更简单。
以下是两种反转字符串的方法。我理解方法2,我不明白方法1是如何工作的。它们都提供相同的输出。任何人都可以解释第一种方法是如何工作的吗?
1
def reverse(string)
reversed_string = ""
i = 0
while i < string.length
reversed_string = string[i] + reversed_string
i += 1
end
return reversed_string
end
2
def rev(string)
string.reverse
end
答案 0 :(得分:2)
我鼓励您在终端中打开irb
并尝试此方法的每一行会产生什么影响。你可以阅读世界上所有的解释,但是你只能通过在屏幕上输入内容并在屏幕上看到输出来获得语言的工作方式。
String基本上是一个数组或一长串字符,例如。 ["H", "e", "l", "l", "o"]
。方法#1设置一个while
循环,该循环对字符串中的每个字符重复执行一次操作。更具体地说,它取每个位置的角色(string[i]
)并将其添加到&#34;结果&#34;的开头。字符串(reversed_string
)逐渐增长,直到原始字符串为止。除了每个字母都添加到结果字符串的开头之外,所以如果原始字符串是&#34; Hello!&#34;,结果字符串将以"H"
开头,然后将变为"eH"
,然后变为"leH"
,依此类推。
大图注:如果您是第一次学习编程,这一切都很好; Ruby是一个出色的语言选择,拥有蓬勃发展和友好的社区,这种for
或while
循环风格是大多数语言的主要内容,非常值得学习和练习。但是你应该知道方法#1中使用的逻辑不是惯用的Ruby ;是的,它会工作正常,但我认为大多数有经验的Ruby开发人员会查看该代码并说出#34; Ick。你为什么不拿这个数组并在其上运行.each
?&#34; Ruby是一种非常灵活的语言,但某些代码模式已经成为常见的或者最喜欢的#34;实践,根据我的经验,使用整数来逐步执行while
循环的结构不是其中之一。
记住这一点,一旦你完成了当前的学习材料,考虑四处寻找一门教你Ruby的课程&#34; Ruby方式&#34;。
答案 1 :(得分:1)
第一种方法是简单地将原始字符串的每个字符添加到一个新字符串中,这会导致字符串本身反转。
string[i] + reversed_string
表示:
reversed_string
由于reversed_string
开始为空,这很方便。
对于字符串“apples”,这将导致:
'a' + ''
'p' + 'a'
'p' + 'pa'
......等等。
答案 2 :(得分:0)
让我们说string = 'Hello'
i = 0
时,string[0]
指的是H
而reversed_string
是``。因此,在reversed_string = string[i] + reversed_string
之后,reversed_string
为H
。
i
然后递增。
i = 1
时,string[1]
指的是e
而reversed_string
指的是H
。因此,在reversed_string = string[i] + reversed_string
之后,reversed_string
为eH
。 e
连接到reversed_string
字符串的前面。
i
然后递增。
i = 2
时,string[2]
指的是l
而reversed_string
指的是He
。因此,在reversed_string = string[i] + reversed_string
之后,reversed_string
为leH
。 l
连接到reversed_string
字符串的前面。
i
然后递增。
循环一直持续到i
等于string.length
,这意味着没有更多的字母移到前面。