Swift:使用自定义顺序按键对字典进行排序

时间:2015-06-27 11:38:56

标签: swift

我正在尝试按键在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

提前致谢。

1 个答案:

答案 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;)