gpt4 book ai didi

ruby - 从 Ruby 数组中删除顺序重复项

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:14 27 4
gpt4 key购买 nike

假设我有以下数组,我想去掉连续的重复项:

arr = [1,1,1,4,4,4,3,3,3,3,5,5,5,1,1,1]

我想得到以下信息:

=> [1,4,3,5,1]

如果有比我的解决方案(或其变体)更简单、更高效的东西,那就太好了:

(arr + [nil]).each_cons(2).collect { |i| i[0] != i[1] ? i[0] : nil }.compact

(arr + [nil]).each_cons(2).each_with_object([]) { 
|i, memo| memo << i[0] unless i[0] == i[1]
}

编辑:看起来@ArupRakshit 下面的解决方案非常简单。我仍在寻找比我的解决方案更高效的方法。

编辑:

我将在响应出现时对其进行基准测试:

require 'fruity'
arr = 10000.times.collect { [rand(5)] * (rand(4) + 2) }.flatten

compare do
abdo { (arr + [nil]).each_cons(2).collect {
|i| i[0] != i[1] ? i[0] : nil }.compact
}
abdo2 {
(arr + [nil]).each_cons(2).each_with_object([]) {
|i, memo| memo << i[0] unless i[0] == i[1]
}
}
arup { arr.chunk(&:to_i).map(&:first) }
arupv2 { arr.join.squeeze.chars.map(&:to_i) }
agis {
i = 1
a = [arr.first]

while i < arr.size
a << arr[i] if arr[i] != arr[i-1]
i += 1
end
a
}
arupv3 { arr.each_with_object([]) { |el, a| a << el if a.last != el } }
end

基准测试结果:

agis is faster than arupv3 by 39.99999999999999% ± 10.0%
arupv3 is faster than abdo2 by 1.9x ± 0.1
abdo2 is faster than abdo by 10.000000000000009% ± 10.0%
abdo is faster than arup by 30.000000000000004% ± 10.0%
arup is faster than arupv2 by 30.000000000000004% ± 10.0%

如果我们使用:

arr = 10000.times.collect { rand(4) + 1 } # less likelihood of repetition

我们得到:

agis is faster than arupv3 by 19.999999999999996% ± 10.0%
arupv3 is faster than abdo2 by 1.9x ± 0.1
abdo2 is similar to abdo
abdo is faster than arupv2 by 2.1x ± 0.1
arupv2 is similar to arup

最佳答案

使用 Enumerable#chunk 执行以下操作:

arr = [1,1,1,4,4,4,3,3,3,3,5,5,5,1,1,1]
arr.chunk { |e| e }.map(&:first)
# => [1, 4, 3, 5, 1]
# if you have only **Fixnum**, something magic
arr.chunk(&:to_i).map(&:first)
# => [1, 4, 3, 5, 1]

更新

根据 @abdo's评论,这是另一种选择:

arr.join.squeeze.chars.map(&:to_i)
# => [1, 4, 3, 5, 1]

另一种选择

arr.each_with_object([]) { |el, a| a << el if a.last != el }

关于ruby - 从 Ruby 数组中删除顺序重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21730055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com