如何根据日期对类对象数组进行排序?

时间:2014-02-06 08:56:16

标签: ruby arrays

我有以下哈希数组:

@products = {#<ProductProxy:0xb486d148 @pA={"productAvailableDateTs"=>"2013-12-04T23:07:12.592Z", "mPrice"=>, "pStock"=>, "id"=>, "productId"=>, "productDesignerId"=>}>,
#<ProductProxy:0xb4adf304 @pA={"productAvailableDateTs"=>"2013-1-04T23:07:12.592Z", "mPrice"=>, "pStock"=>, "id"=>, "productId"=>, "productDesignerId"=>}>,
#<ProductProxy:0xb4adecec @pA={"productAvailableDateTs"=>"2013-15-03T23:07:12.592Z", "mPrice"=>, "pStock"=>, "id"=>, "productId"=>, "productDesignerId"=>}>,

...
}

我想根据productAvailableDateTs值按降序对数组进行排序。我尝试了以下操作:

@products = @products.sort_by{ |k| -k['productAvailableDateTs'] } 

但是这样做,我无法访问productAvailableDateTs字段。我试图打印@products[0]['productAvailableDateTs']。但它会打印nil。如何正确访问该字段?

1 个答案:

答案 0 :(得分:1)

如果您不需要数据按数据库排序(假设您从活动记录中获取了数据),则可以将其转换为数组然后对其进行排序:

@products.to_a.sort{ |a,b| b.productAvailableDateTs <=> a.productAvailableDateTs }

如果它已经是一个数组:

@products.sort{ |a,b| b.productAvailableDateTs <=> a.productAvailableDateTs }

编辑:错过了订单。通过更改第一个和第二个参数来实现订单。