Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何使用ruby从这个数组中获取所有元素?_Arrays_Ruby - Fatal编程技术网

Arrays 如何使用ruby从这个数组中获取所有元素?

Arrays 如何使用ruby从这个数组中获取所有元素?,arrays,ruby,Arrays,Ruby,要从这种类型的数组中获取所有唯一ID: [[], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2]] 给定a您的数组 a.flatten.uniq 为了完整起见,一个微基准测试展示了另一个解决方案:使用uniq的就地版本这将稍微快一点 如果可以更改原始阵列,也可以使用 阵列,展平! array.uniq! 但是请注意,这会修改数组,这可能是不需要的,尤其是当它是方法的参数时 以下是一个微观基准: require "benc

要从这种类型的数组中获取所有唯一ID:

[[], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2]]

给定
a
您的数组

a.flatten.uniq

为了完整起见,一个微基准测试展示了另一个解决方案:使用
uniq的就地版本这将稍微快一点

如果可以更改原始阵列,也可以使用


阵列,展平!
array.uniq!
但是请注意,这会修改
数组
,这可能是不需要的,尤其是当它是方法的参数时

以下是一个微观基准:

require "benchmark/ips"
# ARRAY = [[], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2]].freeze
ARRAY = [[], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2], [], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2], [], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2], [], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2],[], [1], [2], [1, 3, 2], [4, 5, 6, 7, 8, 1], [2, 4], [3], [2]].freeze

Benchmark.ips do |x|
    x.compare!

    x.report("flatten.uniq") { ARRAY.flatten.uniq }
    x.report("flatten.uniq!") { ARRAY.flatten.uniq! }
    x.report("reduce") { ARRAY.reduce([]) { |acc, e| acc | e } }
end
结果如下:

Comparison:
       flatten.uniq!:   107888.3 i/s
        flatten.uniq:   105813.6 i/s - same-ish: difference falls within error
              reduce:    49892.6 i/s - 2.16x  slower

请注意,如果元素较少,则
reduce
变量实际上可能会更快。但它只适用于一个嵌套级别,而其他版本适用于所有级别。因此
[[[1]]]
将不适用于
reduce
变体。

您所说的“id”是指所有数字,或者可能只是每个子数组中的第一个数字?您预期的结果是什么?到目前为止您尝试了什么?表情符号样式:
ari.reduce([],:|)
Comparison:
       flatten.uniq!:   107888.3 i/s
        flatten.uniq:   105813.6 i/s - same-ish: difference falls within error
              reduce:    49892.6 i/s - 2.16x  slower