来自其他数组的Ruby Slice Array

时间:2012-06-16 17:01:37

标签: ruby arrays

我正在研究我的Rails应用程序的一些规范,涉及在数据库中重新排序模型。

由于模型ID未提前知道,我不想硬编码“模型ID列表应为[1,2,3]”,因此我只是将它们收集在一个数组中,因为我创建它们,例如

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

Model.find(:all, order: position).should == ids

无论如何,我想测试我的重新排序逻辑,该逻辑采用有序ID列表:

Model.reorder( [3,1,2] ) # will change position in db 

保持干嘛我只是这样做:

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] }

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  

reordered_ids = [ids [3],ids [1],ids [2]]

reordered_ids = ids.values_at(3, 1, 2)
  

(1..3).each ids&lt;&lt; Model.create()。ID

ids = 3.times.map { Model.create.id }

答案 1 :(得分:0)

我的回答并不完全是你提出的问题,但可能是你所需要的。

如何不决定自己重新订购并进行洗牌,例如

reordered_ids = ids.shuffle

更新: 在作者的评论正确指出之后,shuffle未被排序的优先级低,并且他希望它是明确的,我认为我们可以在这种情况下简单地颠倒顺序以使其显式化。 e.g。

reordered_ids = ids.reverse