此代码:
string="abacdb"
string=string.split("")
string.delete_if{|x| x==string[0]}
puts(string)
返回["b","a","c","d"]
而不是["b","c","d","b"]
。如果x=="a"
,为什么不删除?谁能告诉我为什么这种方法不能正常工作呢?
答案 0 :(得分:3)
delete_if
通过递增x
的索引来迭代,并在针对元素评估块之后立即删除元素。它继续如下。
x
的索引:0
string # => ["a", "b", "a", "c", "d", "b"]
string[0] # => "a"
x # => "a"
delete_if{|x| x==string[0]} # => ["b", "a", "c", "d", "b"]
x
的索引:1
string # => ["b", "a", "c", "d", "b"]
string[0] # => "b"
x # => "a"
delete_if{|x| x==string[0]} # => ["b", "a", "c", "d", "b"]
x
的索引:2
string # => ["b", "a", "c", "d", "b"]
string[0] # => "b"
x # => "c"
delete_if{|x| x==string[0]} # => ["b", "a", "c", "d", "b"]
x
的索引:3
string # => ["b", "a", "c", "d", "b"]
string[0] # => "b"
x # => "d"
delete_if{|x| x==string[0]} # => ["b", "a", "c", "d", "b"]
x
的索引:4
string # => ["b", "a", "c", "d", "b"]
string[0] # => "b"
x # => "b"
delete_if{|x| x==string[0]} # => ["b", "a", "c", "d"]