【发布时间】:2016-09-11 01:27:17
【问题描述】:
这段代码:
string="abacdb"
string=string.split("")
string.delete_if{|x| x==string[0]}
puts(string)
返回 ["b","a","c","d"] 而不是 ["b","c","d","b"]。如果x=="a",为什么不删除?谁能告诉我为什么这个方法不能像我希望的那样工作?
【问题讨论】:
-
这段代码实际上应该导致
string是一个空数组。您正在为数组中的每个项目删除数组的第一个元素。由于前一个元素被删除后,下一个元素成为第一个元素,因此块总是返回 true,从而导致一个空数组。 -
一旦“a”被删除,“b”变为string[0],迭代器将移动到位置2,将新的string[1]与string[0]进行比较,即“ a" == "b"。下一个匹配 string[0] 的可能字符是最后的“b”。
-
在您的第一条语句之后,变量
string包含一个array。您应该避免这种令人困惑的命名。同样,不要将变量array用于哈希或将hash用于字符串。
标签: ruby