Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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
来自其他数组的Ruby切片数组_Ruby_Arrays - Fatal编程技术网

来自其他数组的Ruby切片数组

来自其他数组的Ruby切片数组,ruby,arrays,Ruby,Arrays,我正在为我的Rails应用程序制定一些规范,这些规范涉及在数据库中重新订购模型 由于模型ID没有提前知道,我不想硬编码“模型ID列表应该是[1,2,3]”,所以我只是在创建它们时将它们收集到一个数组中,例如 (1..3).each ids << Model.create().id Model.find(:all, order: position).should == ids 为了保持干爽,我只做: reordered_ids = [ids[3], ids[1], ids[2]

我正在为我的Rails应用程序制定一些规范,这些规范涉及在数据库中重新订购模型

由于模型ID没有提前知道,我不想硬编码“模型ID列表应该是[1,2,3]”,所以我只是在创建它们时将它们收集到一个数组中,例如

(1..3).each
  ids << Model.create().id

Model.find(:all, order: position).should == ids
为了保持干爽,我只做:

reordered_ids = [ids[3], ids[1], ids[2]]
Model.reorder( reordered_ids )

Model.find(...).should == reordered_ids
我很好奇是否有更优雅的方式

reordered_ids = [ids[3], ids[1], ids[2]]
这很有效,但似乎并不更好:

[3,1,2].collect{|i| ids[i] }
有什么想法吗

重新排序的_id=[ids[3],ids[1],ids[2]]


(1..3)每个ID我的答案并不完全是你问的,但可能是你需要的

不如不要自己决定重新排序,做一个洗牌,比如

reordered_ids = ids.shuffle
更新: 在作者的评论正确指出了洗牌的优先级很低,并且他希望它是明确的之后,我认为我们可以简单地颠倒顺序,使其明确。e、 g

reordered_ids = ids.reverse

洗牌数组排序的概率很低,因此不进行任何测试。我认为规范应该是明确的
ids = 3.times.map { Model.create.id }
reordered_ids = ids.shuffle
reordered_ids = ids.reverse