这个迭代反向方法如何在Ruby中工作?

时间:2016-11-04 04:35:57

标签: ruby reverse

过去两个月我一直在制作小型课程,同时还在线学习一些课程,以帮助我学习编码。它一直很顺利,我觉得我要问的问题比我写的一些东西更简单。

以下是两种反转字符串的方法。我理解方法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

3 个答案:

答案 0 :(得分:2)

我鼓励您在终端中打开irb并尝试此方法的每一行会产生什么影响。你可以阅读世界上所有的解释,但是你只能通过在屏幕上输入内容并在屏幕上看到输出来获得语言的工作方式。

String基本上是一个数组或一长串字符,例如。 ["H", "e", "l", "l", "o"]。方法#1设置一个while循环,该循环对字符串中的每个字符重复执行一次操作。更具体地说,它取每个位置的角色(string[i])并将其添加到&#34;结果&#34;的开头。字符串(reversed_string)逐渐增长,直到原始字符串为止。除了每个字母都添加到结果字符串的开头之外,所以如果原始字符串是&#34; Hello!&#34;,结果字符串将以"H"开头,然后将变为"eH",然后变为"leH",依此类推。

大图注:如果您是第一次学习编程,这一切都很好; Ruby是一个出色的语言选择,拥有蓬勃发展和友好的社区,这种forwhile循环风格是大多数语言的主要内容,非常值得学习和练习。但是你应该知道方法#1中使用的逻辑不是惯用的Ruby ;是的,它会工作正常,但我认为大多数有经验的Ruby开发人员会查看该代码并说出#34; Ick。你为什么不拿这个数组并在其上运行.each?&#34; Ruby是一种非常灵活的语言,但某些代码模式已经成为常见的或者最喜欢的#34;实践,根据我的经验,使用整数来逐步执行while循环的结构不是其中之一。

记住这一点,一旦你完成了当前的学习材料,考虑四处寻找一门教你Ruby的课程&#34; Ruby方式&#34;。

答案 1 :(得分:1)

第一种方法是简单地将原始字符串的每个字符添加到一个新字符串中,这会导致字符串本身反转。

string[i] + reversed_string表示:

  • 取弦的第i个位置
  • 将其添加到reversed_string

由于reversed_string开始为空,这很方便。

对于字符串“apples”,这将导致:

  • 'a' + ''
  • 'p' + 'a'
  • 'p' + 'pa'

......等等。

答案 2 :(得分:0)

让我们说string = 'Hello'

i = 0时,string[0]指的是Hreversed_string是``。因此,在reversed_string = string[i] + reversed_string之后,reversed_stringH

i然后递增。

i = 1时,string[1]指的是ereversed_string指的是H。因此,在reversed_string = string[i] + reversed_string之后,reversed_stringeHe连接到reversed_string字符串的前面。

i然后递增。

i = 2时,string[2]指的是lreversed_string指的是He。因此,在reversed_string = string[i] + reversed_string之后,reversed_stringleHl连接到reversed_string字符串的前面。

i然后递增。

循环一直持续到i等于string.length,这意味着没有更多的字母移到前面。