Ruby 这种迭代逆向的方法是如何工作的?
How does this iterative reverse method work in Ruby?
过去 2 个月我一直在构建小程序,同时还参加了一些在线课程来帮助我学习编码。进展顺利,我觉得我要问的问题比我写的一些东西更简单。
以下是反转字符串的两种方法。我理解方法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
假设 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
,这意味着没有更多的字母可以移动到前面。
第一种方法是简单地将原始字符串的每个字符添加到新字符串中,这会导致字符串本身的反转。
string[i] + reversed_string
表示:
- 取字符串的第i个位置
- 将其添加到
reversed_string
因为 reversed_string
一开始是空的,所以这很方便。
对于字符串 "apples",结果将是:
'a' + ''
'p' + 'a'
'p' + 'pa'
...等等。
我建议您在终端中打开 irb
并试验此方法的每一行会产生什么效果。您可以阅读世界上所有的解释,但您只能通过输入内容并在屏幕上查看输出来深入了解该语言的工作原理。
字符串基本上是一个数组或一长串字符,例如。 ["H", "e", "l", "l", "o"]
。方法 #1 设置一个 while
循环,对字符串中的每个字符重复执行一次操作。更具体地说,它获取每个位置的字符 (string[i]
) 并将其添加到 "result" 字符串 (reversed_string
) 的 beginning增长直到与原始字符串一样长。除了每个字母都添加到结果字符串的开头,所以如果原始字符串是"Hello!",结果字符串将以"H"
开头,然后将变成 "eH"
,然后 "leH"
,依此类推。
大图注:如果您是第一次学习编程,这一切都很好; Ruby 是一个很棒的语言选择,拥有繁荣和友好的社区,这种 for
或 while
循环的风格是大多数语言的主要内容,非常值得学习和练习。但是您应该知道 方法 #1 中使用的逻辑不是惯用的 Ruby;是的,它会很好地工作,但我认为大多数有经验的 Ruby 开发人员会查看该代码并说 "Ick. Why didn't you just take the array and run .each
on it?" Ruby 是一种非常灵活的语言,但某些代码模式已经成为通用或 "favorite" 实践,根据我的经验,使用整数逐步执行 while
循环的结构不是其中之一。
请牢记这一点,一旦您完成了当前的学习材料,请考虑四处寻找在 "the Ruby way" 中教您 Ruby 的课程。
过去 2 个月我一直在构建小程序,同时还参加了一些在线课程来帮助我学习编码。进展顺利,我觉得我要问的问题比我写的一些东西更简单。
以下是反转字符串的两种方法。我理解方法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
假设 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
,这意味着没有更多的字母可以移动到前面。
第一种方法是简单地将原始字符串的每个字符添加到新字符串中,这会导致字符串本身的反转。
string[i] + reversed_string
表示:
- 取字符串的第i个位置
- 将其添加到
reversed_string
因为 reversed_string
一开始是空的,所以这很方便。
对于字符串 "apples",结果将是:
'a' + ''
'p' + 'a'
'p' + 'pa'
...等等。
我建议您在终端中打开 irb
并试验此方法的每一行会产生什么效果。您可以阅读世界上所有的解释,但您只能通过输入内容并在屏幕上查看输出来深入了解该语言的工作原理。
字符串基本上是一个数组或一长串字符,例如。 ["H", "e", "l", "l", "o"]
。方法 #1 设置一个 while
循环,对字符串中的每个字符重复执行一次操作。更具体地说,它获取每个位置的字符 (string[i]
) 并将其添加到 "result" 字符串 (reversed_string
) 的 beginning增长直到与原始字符串一样长。除了每个字母都添加到结果字符串的开头,所以如果原始字符串是"Hello!",结果字符串将以"H"
开头,然后将变成 "eH"
,然后 "leH"
,依此类推。
大图注:如果您是第一次学习编程,这一切都很好; Ruby 是一个很棒的语言选择,拥有繁荣和友好的社区,这种 for
或 while
循环的风格是大多数语言的主要内容,非常值得学习和练习。但是您应该知道 方法 #1 中使用的逻辑不是惯用的 Ruby;是的,它会很好地工作,但我认为大多数有经验的 Ruby 开发人员会查看该代码并说 "Ick. Why didn't you just take the array and run .each
on it?" Ruby 是一种非常灵活的语言,但某些代码模式已经成为通用或 "favorite" 实践,根据我的经验,使用整数逐步执行 while
循环的结构不是其中之一。
请牢记这一点,一旦您完成了当前的学习材料,请考虑四处寻找在 "the Ruby way" 中教您 Ruby 的课程。