我正在尝试按键在Swift中对字典进行排序。我的密钥遵循自定义模式,我无法找到对字典进行排序的正确方法。
我使用dict
名称和季节简化了我的任务:
var dict = [
"Summer 14": [["Peter"], ["Karl"], ["Jeff"], ["Sandra"]],
"Winter 14/15": [["Gil"], ["Monica"]],
"Winter 13/14": [["Sandra"], ["Anna"], ["Bert"]]
]
Array(dict.keys).sorted(<)
等基本排序选项无法正确应用。
我想要的结果是一个按顺序排列的字典:Winter 13/14 < Summer 14 < Winter 14/15
。
提前致谢。
答案 0 :(得分:1)
在我看来,您的主要挑战是如何对季节字符串进行排序。您想要对字典键数组进行排序这一事实是偶然的。
我建议创建一个以字符串作为输入的全局函数valueForSeason。它将返回表示季节的双精度:起始年份值为整数部分,夏季加0.0,冬季加0.5。对于格式错误的季节字符串,请返回0.0,以使其浮动到顶部。
然后你可以把你的字典键拉成一个数组并按valueForSeason排序:
var keys = dict.keys
keys.sort()
{
$0.valueForSeason() < $1.valueForSeason()
}
请注意,您的数据格式中存在潜伏的Y2K错误,而您实际上无法修复。您使用2个字符年份,99个最有可能代表1999年,但它会在14之后排序。您可以玩游戏,例如假设日期在1900年后的50个日期和之前的日期&# 39; 50在2000年,但这种方法容易出错。您最好将字符串格式更改为&#34; YYYY&#34; (例如&#34; 2014年夏季&#34;以及&#34; 2014/2015年冬季&#34;)