Swift 为什么这个排序算法失败了?
我开发了下面的算法来对字典项数组进行排序Swift 为什么这个排序算法失败了?,swift,sorting,dictionary,Swift,Sorting,Dictionary,我开发了下面的算法来对字典项数组进行排序 guard var imageUrlString = anyImage.value as? [String:AnyObject] else { return } var values = [AnyObject]() var keys = [String]() var done = false var j = 1 while !done { for i in imageUrlString { print(i.key, " thi
guard var imageUrlString = anyImage.value as? [String:AnyObject] else { return }
var values = [AnyObject]()
var keys = [String]()
var done = false
var j = 1
while !done {
for i in imageUrlString {
print(i.key, " this is the key")
if "media\(j)" == i.key {
values.append(i.value)
keys.append(i.key)
print(i, " This is teh i for in if ")
if imageUrlString.count == j {
done = true
break;
}
j+=1
} else {
print("No,,.")
}
}
}
问题是,有时,例如,每次第一个媒体是图像时,它都会永远循环。如何解决这个问题,使算法能够在所有条件下有效地对数据进行排序?看起来您实际上在创建两个并行数组:
键
和值
我开始创建这两个数组,排序。这里有一个例子
var imageUrlString = [String: AnyObject]()
imageUrlString["media3"] = "whatever 3 content" as AnyObject
imageUrlString["media7"] = "whatever 7 content" as AnyObject
imageUrlString["media1"] = "whatever 1 content" as AnyObject
let keys = Array(imageUrlString.keys).sorted()
var values = [AnyObject]()
keys.forEach {
values.append(imageUrlString[$0]!)
}
print(keys)
print(values)
嗯,看起来你得到的计数可能与
j
不同;因此,您的done
标志永远不会处于偶然状态并保持循环。您可以将while循环更改为在一定次数的尝试后退出的循环,例如for循环(作为预防措施)。第二,你需要while循环吗?为什么要一遍又一遍地读取同一数组imageUrlString
?这段代码似乎效率很低。为什么不简单地创建一个键数组并使用内置的排序功能进行排序?@Paulw11如果您建议一个选项,我可以测试它,但我过去一直在这样做,出于任何原因,我认为我没有发现任何有效的方法,所以我创建了这个方法,90%的时间都有效,当然,10%是一个很大的数字,你可以编辑你的问题来显示你想要的输入数据和输出。你们的问题是想要后缀的数字排序,而不是词汇排序吗?@Paulw11检查编辑