【问题标题】:Sorting plist data对 plist 数据进行排序
【发布时间】:2017-02-24 17:31:56
【问题描述】:

我在 plist 中有一些重复数据,然后我将其提取到字典中并显示在我的应用程序中。唯一的问题是它需要与我将它放在 plist 中的顺序相同,但很明显,字典无法排序并且它是未排序的。那么我该如何实现呢?

我的 plist 数据这样重复

然后我将其转换为[Int : ItemType] 类型的字典,ItemType 是我的数据协议,如下所示:

class ExhibitionUnarchiver {
    class func exhibitionsFromDictionary(_ dictionary: [String: AnyObject]) throws -> [Int : ItemType] {
        var inventory: [Int : ItemType] = [:]
        var i = 0;

        print(dictionary)

        for (key, value) in dictionary {
            if let itemDict = value as? [String : String],
            let title = itemDict["title"],
            let audio = itemDict["audio"],
            let image = itemDict["image"],
            let description = itemDict["description"]{
                let item = ExhibitionItem(title: title, image: image, audio: audio, description: description)
                inventory.updateValue(item, forKey: i);
                i += 1;
            }
        }

        return inventory
    }
}

这会产生这样的字典:

[12: App.ExhibitionItem(title: "Water Bonsai", image: "waterbonsai.jpg", audio: "exhibit-audio-1", description: "blah blah blah"), 17: App.ExhibitionItem.....

我希望自从我制作了密钥的 Int 后,我​​可以对其进行排序,但到目前为止我还没有运气。您可能会说我对 swift 还很陌生,所以请提供您认为相关的任何信息。谢谢!

【问题讨论】:

  • 我认为保持顺序的唯一方法是使用数组而不是字典。如果字典中的Int 键很重要,我会将其存储为“标题”旁边的兄弟,等等。
  • 在代码中将数组转换成字典很容易,但在字典中保持顺序是不可能的。
  • 我一直在考虑这个...但是因为它是ExhibitionItem 结构的一部分,我不能像普通数组一样对其进行排序吗?
  • 我对您的评论感到困惑。我假设您希望对 ExhibitionItems 进行排序,对吗?如果您使用数组而不是带有数字键的字典,您的顺序将被保留。数组本质上是有序的,字典不是。

标签: swift dictionary property-list


【解决方案1】:

字典没有顺序。如果您需要特定订单,请将root 设为Array 类型:


或手动按键排序:

var root = [Int:[String:String]]()
root[1] = ["title":"Hi"]
root[2] = ["title":"Ho"]

let result = root.sorted { $0.0 < $1.0 }

print(result)

打印:

[(1, ["title": "Hi"]), (2, ["title": "Ho"])]

【讨论】:

  • 如果根是一个数组,我将如何按键排序,在您的示例中为“项目 0”、“项目 1”等
  • @ShanRobertson 数组从索引 0 到 count - 1 处的索引排序。它已经按照您想要的顺序排列。
  • 没错。枚举键将过时。还在答案中添加了排序示例。
  • 感谢您的澄清...错过了这个似乎很愚蠢,但就像我说的,我是新人!我将 plist 更改为字典数组,结果一切正常。
  • @ShanRobertson 不用担心。
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多