如何在Ruby中根据索引从数组中获取多个值?
嗨,我来帮你搞定这个Ruby数组的取值问题~
用
values_at获取指定索引元素的解决方案 你说得没错,values_at本身不直接接收数组作为参数,但它支持传入多个独立的索引值,这时候我们可以用Ruby的数组展开操作符*,把索引数组拆成单个参数传递给它,完美适配这个方法!
用你给出的数组举个实际例子:
my_arr = [121, 23, 46, 91, 38, 140] indxs = [1, 2, 4] # 用*展开索引数组,将其转为多个独立参数传给values_at target_elements = my_arr.values_at(*indxs) puts target_elements.inspect # 输出结果:[23, 46, 38]
这个展开操作符的作用就是把indxs数组里的每个元素都单独提取出来,作为values_at的参数,完全符合方法的参数要求。
两种方案的基准测试对比
之后我针对values_at和map直接取值这两种方案做了基准测试,测试条件为:1000次迭代,原数组长度20,索引数组长度4,测试结果如下:
user system total real values_at 0.004502 0.000000 0.004502 ( 0.004476) map[i] 0.005878 0.000000 0.005878 ( 0.006968)
从结果能明显看到,values_at的性能要优于map直接取值的方式,尤其是实际运行时间(real列)的差距更为显著。
内容的提问来源于stack exchange,提问作者Alexander Gorg
相关产品推荐
相关产品推荐

