在以下输出中,每行包含一个日期,它是无序的。如何按日期订购每一行?请注意,列表位于数组中。
Wilkinson Stacy NYC 1/22/1964 Shocking Pink
Bednar Filomena New York City 1/24/1980 Salmon
Goyette Timmothy London 10/2/1964 Pacific Blue
Nolan Rhiannon LA 10/4/1974 Vivid Tangerine
Bruen Rigoberto SF 12/1/1962 Raw Umber
Parker Matteo Melbourne 2/14/1962 Burnt Sienna
Cummerata Elliot New York City 4/3/1947 Neon Carrot
Kirlin Mckayla Atlanta 5/29/1986 Maroon
Barrows Anika Hong Kong 5/5/1965 Spring Green
答案 0 :(得分:3)
arr = <<-BITTER_END.split("\n")
Wilkinson Stacy NYC 1/22/1964 Shocking Pink
Bednar Filomena New York City 1/24/1980 Salmon
Goyette Timmothy London 10/2/1964 Pacific Blue
Nolan Rhiannon LA 10/4/1974 Vivid Tangerine
Bruen Rigoberto SF 12/1/1962 Raw Umber
Parker Matteo Melbourne 2/14/1962 Burnt Sienna
Cummerata Elliot New York City 4/3/1947 Neon Carrot
Kirlin Mckayla Atlanta 5/29/1986 Maroon
Barrows Anika Hong Kong 5/5/1965 Spring Green
BITTER_END
require 'date'
arr.sort_by { |line| Date.strptime(line[/\d\d?\/\d\d?\/\d{4}/], '%m/%d/%Y') }
#=> ["Cummerata Elliot New York City 4/3/1947 Neon Carrot",
# "Parker Matteo Melbourne 2/14/1962 Burnt Sienna",
# "Bruen Rigoberto SF 12/1/1962 Raw Umber",
# "Wilkinson Stacy NYC 1/22/1964 Shocking Pink",
# "Goyette Timmothy London 10/2/1964 Pacific Blue",
# "Barrows Anika Hong Kong 5/5/1965 Spring Green",
# "Nolan Rhiannon LA 10/4/1974 Vivid Tangerine",
# "Bednar Filomena New York City 1/24/1980 Salmon",
# "Kirlin Mckayla Atlanta 5/29/1986 Maroon"]
正如@xlembouras指出的那样,如果需要,可以使用.join("\n")
将数组返回给字符串。
答案 1 :(得分:2)
最好的方法是将它们全部转换为日期对象然后排序。
这些日期的最大问题是它们采用美国格式,如果格式为$("#nav_mobile").html($("#nav_main").html());
$("#menu_button span").click(function(){
if ($("#nav_mobile ul").hasClass("expanded")) {
$("#nav_mobile ul.expanded").removeClass("expanded").slideUp(250);
$(this).removeClass("open");
} else {
$("#nav_mobile ul").addClass("expanded").slideDown(250);
$(this).addClass("open");
}
});
<div id="menu_button">
<span>Menu</span>
</div>
<nav id="nav_main">
<ul>
<li><a href="#">1. Link</a></li>
<li><a href="#">2. Link</a></li>
<li><a href="#">3. Link</a></li>
<li><a href="#">4. Link</a></li>
</ul>
</nav>
<nav id="nav_mobile"></nav>
,那么您必须使用day/month/year
Date.strptime
看起来你编辑了你的问题。如果您尝试按日期内的日期对行进行排序,则需要使用require 'date'
dates = ['1/22/1964' ,'1/24/1980' ,'10/2/1964' ,'10/4/1974' ,'12/1/1962' ,'2/14/1962' ,'4/3/1947' ,'5/29/1986' ,'5/5/1965']
dates = dates.collect {|date| Date.strptime(date, "%m/%d/%Y")}.sort
#if you want them to go back to the same format
dates.collect {|date| date.strftime("%-m/%-d/%Y") }
如果您有一个如下所示的数组:
sort_by
然后您可以按日期对这些行进行排序:
array = [
"Wilkinson Stacy NYC 1/22/1964 Shocking Pink",
"Bednar Filomena New York City 1/24/1980 Salmon",
"Goyette Timmothy London 10/2/1964 Pacific Blue",
"Nolan Rhiannon LA 10/4/1974 Vivid Tangerine",
"Bruen Rigoberto SF 12/1/1962 Raw Umber",
"Parker Matteo Melbourne 2/14/1962 Burnt Sienna",
"Cummerata Elliot New York City 4/3/1947 Neon Carrot",
"Kirlin Mckayla Atlanta 5/29/1986 Maroon",
"Barrows Anika Hong Kong 5/5/1965 Spring Green",
]
答案 2 :(得分:0)
如果您有dates
数组,例如
dates = ['1/22/1964' ,'1/24/1980' ,'10/2/1964' ,'10/4/1974' ,'12/1/1962' ,'2/14/1962' ,'4/3/1947' ,'5/29/1986' ,'5/5/1965']
您可以使用Enumerable#sort_by
对其进行排序require 'date'
dates = ['1/22/1964' ,'1/24/1980' ,'10/2/1964' ,'10/4/1974' ,'12/1/1962',
'2/14/1962' ,'4/3/1947' ,'5/29/1986' ,'5/5/1965']
dates.sort_by { |x| Date.strptime(x, "%m/%d/%Y") }
#=> ["4/3/1947", "2/14/1962", "12/1/1962", "1/22/1964", "10/2/1964", "5/5/1965", "10/4/1974", "1/24/1980", "5/29/1986"]
根本没有弄乱初始数组。
如果您想要反向订购,可以在最后添加.reverse
。