按日期对数组元素进行排序

用户3923122

我有以下数组。

dates = ["6/23/2014", "8/5/2014", "8/19/2014", "6/26/2014", "8/19/2014", "8/19/2014",
"7/8/2014", "6/3/2014", "7/30/2014", "7/3/2014", "6/3/2014", "6/26/2014"]

我们的数组存储10个字符串对象。为了对它们进行排序,我需要重新排列每个元素。

"2014/8/5", "2014/8/19", "2014/8/19", etc.

这样,例如,2014年1月1日不会在1994年12月13日之前。

我尝试了以下

dates.sort_by {|date|date.split(/[\/]/).rotate(-1).join('/')}

我想按日期排序此数组,以最新的日期为第一。

实际产量

8/5/2014
8/19/2014
8/19/2014
8/19/2014
7/8/2014
7/30/2014
7/3/2014
6/3/2014
6/3/2014
6/26/2014

预期产量

8/19/2014
8/19/2014
8/19/2014
8/5/2014
7/30/2014
7/3/2014
6/26/2014
6/3/2014
6/3/2014

该解决方案涉及利用Ruby Array Class sort_by方法。我想按日期格式排序,较新的日期早于较早的日期。

我的问题是,如何根据日期对数组进行排序。

如果这是一个愚蠢的问题,我表示歉意,但是我已经搜索了该站点,但未找到任何结果。

预先感谢您的任何帮助。

卡里·斯沃夫兰

我不知道为什么您的预期输出只包含12个条目中的9个,而您提到的是大小为10的数组,但是我相信您希望对所有12个数组进行排序。我的首选方式是使用@BroiSatse的方法,但是我将提供一种不使用类中方法的方法Date我将其包括在内是因为它对于Ruby初学者而言具有一些有趣的方面。

dates = ["6/23/2014", "8/5/2014",  "8/19/2014", "6/26/2014",
         "8/19/2014", "8/19/2014", "7/8/2014",  "6/3/2014",
         "7/30/2014", "7/3/2014",  "6/3/2014",  "6/26/2014"]

dates.sort_by { |d| d.split(?/).rotate(-1).map { |e| -e.to_i } }
  #=> ["8/19/2014", "8/19/2014", "8/19/2014", "8/5/2014",
  #    "7/30/2014", "7/8/2014",  "7/3/2014",  "6/26/2014",
  #    "6/26/2014", "6/23/2014", "6/3/2014", "6/3/2014"]

这是正在发生的事情。

enum = dates.sort_by
  #=> #<Enumerator: ["6/23/2014", "8/5/2014",  "8/19/2014", "6/26/2014",
  #                  "8/19/2014", "8/19/2014", "7/8/2014",  "6/3/2014",
  #                  "7/30/2014", "7/3/2014",  "6/3/2014",  "6/26/2014"]:sort_by>

如您所见,enum是一个枚举器。它传递到其块中的第一个值是"6/23/2014",它分配给块变量:

d = "6/23/2014"

a = d.split(?/)
  #=> ["6", "23", "2014"]
b = a.rotate(-1)
  #=> ["2014", "6", "23"]
c = b.map { |e| -e.to_i }
  #=> [-2014, -6, -23]

同样,的第三个元素将enum转换为:

"8/19/2014".split(?/).rotate(-1).map { |e| -e.to_i }
  #=> [-2014, -8, -19]

sort_by使用Array#<=>比较元素对。阅读该文档后,您将了解原因:

[-2014, -6, -23] <=> [-2014, -8, -19]
  #=> 1

意思是"8/19/2014"应该在"6/23/2014"排序之前

顺便说一句,有必要将月份和日期从字符串转换为整数,因为这些字符串不包含单个数字值的前导零。如果我们将它们留为字符串"8" > "15",这不是我们想要的。由于无论如何我们都要转换为整数,因此使它们为负要比使它们为正并应用于reverse已排序数组要容易得多

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按数组元素对数组进行排序

来自分类Dev

laravel按日期对数组进行排序

来自分类Dev

按日期对数组排序

来自分类Dev

在Javascript中按日期对数组进行排序

来自分类Dev

按日期和时间升序对数组进行排序

来自分类Dev

按日期对数组中的对象进行排序

来自分类Dev

按日期和时间升序对数组进行排序

来自分类Dev

按订单C#对数组日期进行排序

来自分类Dev

按自定义日期时间对数组进行排序

来自分类Dev

JS:按日期和时间对数组进行排序

来自分类Dev

PHP中按日期对数组进行排序

来自分类Dev

Ruby按子元素对数组进行排序

来自分类Dev

按C#中元素的频率对数组进行排序

来自分类Dev

Ruby按子元素对数组进行排序

来自分类Dev

按日期对数据存储进行排序?

来自分类Dev

C ++-按日期对数组排序

来自分类Dev

PHP - 按日期时间和单独的日期对数组进行排序

来自分类Dev

PHP按名称对数组进行排序

来自分类Dev

Python按模板对数组进行排序

来自分类Dev

按特定顺序对数组进行排序

来自分类Dev

按相应范围对数组进行排序

来自分类Dev

按数值对数组进行排序

来自分类Dev

按孩子的孩子对数组进行排序

来自分类Dev

按定义的顺序对数组进行排序

来自分类Dev

如何按“包含”对数组进行排序?

来自分类Dev

按严重程度对数组进行排序

来自分类Dev

按字母值对数组进行排序

来自分类Dev

以升序对数组的元素进行排序

来自分类Dev

根据特定元素对数组进行排序