【问题标题】:Why does this sorting algorithm fail?为什么这个排序算法会失败?
【发布时间】:2019-05-04 03:56:59
【问题描述】:

我开发了以下算法来对字典项数组进行排序。

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,,.")
        }
    }
}

问题是有时,例如,每次第一个媒体是图像时,它都会永远循环。我该如何解决这个问题,以便算法可以在所有条件下有效地排序?

【问题讨论】:

  • 好吧,看来您得到的计数可能与j 不同;因此,您的 done 标志永远不会出现状态并继续循环。您可以将 while 循环更改为在一定次数的尝试后退出的东西,例如 for 循环(只是作为预防措施)。其次,你需要while循环吗?为什么你会一遍又一遍地读取同一个数组imageUrlString
  • 这段代码似乎效率很低。为什么不简单地创建一个键数组并使用内置的排序功能对其进行排序?
  • @Paulw11 如果您建议一个选项,我可以测试它,但我过去一直走这条路,出于某种原因,我认为我没有找到任何有效的方法,所以我创建了这个 90 % 的时间有效,但当然 10% 是一个很大的数字
  • 也许您可以编辑您的问题以显示输入数据和您所追求的输出。你的问题是你想要一个数字排序的后缀,而不是一个词法排序?
  • @Paulw11 检查编辑

标签: swift sorting dictionary


【解决方案1】:

看起来您实际上是在创建两个并行数组:keysvalues

我创建了这两个数组,并进行了排序。这是一个例子

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2012-07-26
    相关资源
    最近更新 更多