红宝石 - uniq之间有什么区别!和uniq

时间:2015-11-25 18:04:17

标签: ruby-on-rails ruby

a = [1,2,3]
a.uniq!  # nil
a.uniq  # [1,2,3]

为什么a.uniq!不是[1,2,3]?

让我知道原因。谢谢!

2 个答案:

答案 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]