a = [1,2,3]
a.uniq! # nil
a.uniq # [1,2,3]
为什么a.uniq!不是[1,2,3]?
让我知道原因。谢谢!
答案 0 :(得分:7)
您需要阅读Ruby文档。
uniq
方法通过删除self中的重复值来返回一个新数组。如果未找到重复项,则返回相同的数组值。
a = [ "a", "a", "b", "b", "c" ]
a.uniq # => ["a", "b", "c"]
b = [ "a", "b", "c" ]
b.uniq # => ["a", "b", "c"]
uniq!
方法从self中删除重复元素,如果没有更改,则返回nil
(即没有找到重复项)。
a = [ "a", "a", "b", "b", "c" ]
a.uniq! # => ["a", "b", "c"]
b = [ "a", "b", "c" ]
b.uniq! # => nil
答案 1 :(得分:3)
大多数以bang(!)结尾的方法会更改变量,而没有它的方法只会返回变更后的变量。
所以,如果你有这样的事情:
a = [1, 1, 2, 3]
a.uniq
将返回[1, 2, 3]
,但不会更改a
,而a!
会将a
更改为等于[1, 2, 3]
[1] pry(main)> a = [1,1,2,3]
=> [1, 1, 2, 3]
[2] pry(main)> a.uniq
=> [1, 2, 3]
[3] pry(main)> a
=> [1, 1, 2, 3]
[4] pry(main)> a.uniq!
=> [1, 2, 3]
[5] pry(main)> a
=> [1, 2, 3]
[6] pry(main)> a.uniq!
=> nil
[7] pry(main)> a
=> [1, 2, 3]