【问题标题】:Put specific collection/array item on the last position in rails将特定的集合/数组项放在 rails 的最后一个位置
【发布时间】:2015-05-06 20:19:28
【问题描述】:

我在 rails 中有一个集合/数组,转换为 json 如下所示:

@collection = [{"order_number":"123","item":"Paper"},{"order_number":"567","item":"Ruler"},{"order_number":"344","item":"Pen"},{"order_number":"342","item":"Pencil"},{"order_number":"877","item":"Keyboard"}]

我想挑选order_number为“342”的商品放在集合的最后一个位置,所以新的集合是这样的:

@collection = [{"order_number":"123","item":"Paper"},{"order_number":"567","item":"Ruler"},{"order_number":"344","item":"Pen"},{"order_number":"877","item":"Keyboard"},{"order_number":"342","item":"Pencil"}]

理论上,它应该是这样的:

@collection.last = @collection[3]

但这显然不是花哨的 ruby​​ 样式,也不会像我的示例那样重新排序数组。 另外我不知道商品的索引,因为它可能会根据用户的购物而改变。

【问题讨论】:

  • 你总是知道它的索引吗?还是你需要找到它?你想要/需要它排序吗?
  • 不,我不知道它的索引,我需要找到它。根据客户购买的商品,集合中总会有不同的商品。所以它确实需要排序。

标签: ruby-on-rails ruby sorting


【解决方案1】:

怎么样:

@collection << @collection.delete_at[@collection.index{|x| x[:order_number] == "342"}]

这基本上是先搜索带有:order_number342的元素的索引,使用该索引将其删除,然后将删除的元素再次存储在末尾。

【讨论】:

    【解决方案2】:

    您也可以使用partition 方法:

    @collection = @collection.partition { |h| h['order_number'] != '342' }.flatten
    

    【讨论】:

      【解决方案3】:

      只需将您的收藏分成两部分(无 342 订单和有 342 订单),然后加入它们。它应该看起来像:

      @collection = @collection.select {|e| e[:order_number] != '342' } + @collection.select {|e| e[:order_number] == '342' }
      

      【讨论】:

        【解决方案4】:

        如果你有一个项目的索引,它归结为

        @collection << @collection.delete_at(3)
        

        如果没有,可以尝试使用

        @collection.find_index{ |el| el["order_number"] == "123" }
        

        【讨论】:

        • 抱歉这里不准确,我不知道它的索引。我需要先找到它。然后对数组进行排序。
        【解决方案5】:

        你也可以试试这个:

        > @collection.each_with_index{ |key,value| @collection.push(@collection.delete_at(value)) if key[:order_number] == "344" }
        #=>[{:order_number=>"123", :item=>"Paper"}, {:order_number=>"567", :item=>"Ruler"}, {:order_number=>"342", :item=>"Pencil"}, {:order_number=>"877", :item=>"Keyboard"}, {:order_number=>"344", :item=>"Pen"}]
        

        【讨论】:

          猜你喜欢
          • 2021-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多