有没有一种方法可以使用Ruby删除数组中的特定重复项?示例数组:
["hello", "removeme", "removeme", "hello", "testing"]
我只想删除该数组上"removeme"
的重复项。所需的输出是:
["hello", "removeme", "hello", "testing"]
有没有这样的方法来获得所需的输出?["hello", "removeme", "removeme", "hello", "testing"].uniq('removeme')
先谢谢你了。
4条答案
按热度按时间fsi0uk1n1#
您可以将
uniq
与一个块一起使用,该块根据块的返回值删除重复项:对于等于
'removeme'
的元素,我们返回true
,对于其他元素('hello'
,'hello'
和'testing'
),我们返回一个新对象:(注意不同的对象ID)所有具有相同返回值的元素都被认为是重复的,即
uniq
将把'removeme'
视为重复的,而其他任何东西都是唯一的,而不管它的实际值如何。这允许两个相同的'hello'
字符串保留下来。除了
Object.new
,你也可以使用元素的索引:需要
enum_for
,因为没有块的uniq
返回一个新数组而不是枚举数(这反过来又是链接with_index
所需要的)。2ul0zpep2#
除了第一次出现的词之外,拒绝所有的词怎么样,像这样。
请参见
Array#index
、Enumerator#with_index
和Array#reject
。或者你可以迭代数组,只复制第一次出现的数组到一个新数组中:
参见:
mlmc2os53#
这里有两种方法来计算感兴趣的数组。
假设给定的数组如下。
在每个示例中,
arr
不变。参见Array#index、Array#insert和Array#delete
在每个示例中,
arr
不变。参见Array#values_at。
disbfnqx4#
如何通过添加新方法来扩展Array类?
我们为Array类定义了一个新的方法uniq_specific!,它接受一个目标元素数组作为参数。它迭代数组并删除每个目标元素的所有出现,除了第一个。然后,我们用目标值[“removeme”,“hello”]在示例数组上调用这个方法,它会产生所需的输出。