【问题标题】:Order an array which contains OpenStructs by another array通过另一个数组对包含 OpenStructs 的数组进行排序
【发布时间】:2015-11-16 13:57:41
【问题描述】:

我有一个包含 OpenStruct 元素的数组。

我想按 id 属性对它们进行排序,但不是按数字顺序,我可以通过以下方式实现:

a.sort! { |x,y| x.id <=> y.id }

我需要的顺序,因为没有逻辑,所以我有一个数组,可以说:

order = ['4','32','1','3','5']

我想以这种方式订购我的a 数组。

每个a[x] 中包含的所有数据都是一个具有.id 属性的OpenStruct。

【问题讨论】:

  • 看起来像家庭作业,到目前为止你尝试了什么?
  • 不,不是作业。太老了。这是工作 - 工作。我已经尝试过{ |x| order.index &lt;=&gt; x.id } 之类的方法,以及我发现的其他方法,但我认为这可能是因为在内部使用了 OpenStruct,所以一切都不起作用。不确定。

标签: arrays ruby sorting


【解决方案1】:

不清楚您是否有数字或字符串作为属性。如果是前者,那么做

order.map!(&:to_i)

首先。然后做:

a.sort_by!{|e| order.index(e.id)}

如果没有重复,则改为:

order & a.map(&:id)

【讨论】:

  • @SergioTulentsev 你是说我的第二种方式?
  • 如果要订购的数组只是一个数组数组,这很好用。在控制台上工作,但是一旦我使用 OpenStruct 就会默默地失败。我会改进我的问题以澄清。
  • 原来我需要将块中的order.index(e.id) 转换为整数:a.sort_by!{ |e| order.index(e.id).to_i }。我认为这可能是因为某些 id 没有缓存在 order 数组中。会这样吗?
猜你喜欢
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多