Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么这个排序算法失败了?_Swift_Sorting_Dictionary - Fatal编程技术网

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检查编辑