来自plist文件的数组

时间:2017-12-11 10:50:15

标签: ios arrays swift dictionary

我有一个plist文件,但是从这个文件中获取无序数组:

    if let path = Bundle.main.path(forResource: "SomePlistFile", ofType: "plist"){

        if let array = NSDictionary(contentsOfFile: path){

          let list = Array(array.allKeys)
            print(list)

      }
    }

打印(列表)的结果如下所示:

[9, 25, 18, 10, 26, 19, 11, 27, 12, 1, 28, 20, 13, 2, 29, 21, 14, 3, 4, 22, 15, 5, 6, 30, 23, 16, 7, 31, 24, 17, 8]

我需要像[1,2,3,....30,31]

这样的数组

3 个答案:

答案 0 :(得分:0)

由于您从plist获取list,作为一个数组成功,所以您需要做的就是使用sorted()数组实例方法。

但是,由于您正在阅读plist文件中的值,因此Array(array.allKeys)的类型为[Any],以便能够使用您拥有的sorted() 投下它,像这样:

if let path = Bundle.main.path(forResource: "SomePlistFile", ofType: "plist"){
    if let array = NSDictionary(contentsOfFile: path){
        if let list = Array(array.allKeys) as? [Int] {
            let sortedList = list.sorted()

            print(sortedList)
        }
    }
}

sortedList应该是理想的结果。

答案 1 :(得分:0)

另一种方法是将NSDictionary转换为[Int:Any]这允许您调用.sorted()

if let path = Bundle.main.path(forResource: "SomePlistFile", ofType: "plist"){

        if let array = NSDictionary(contentsOfFile: path) as? [Int:Any]{

          let list = Array(array.keys).sorted()
          print(list)

      }
    }

答案 2 :(得分:0)

首先,你的问题有点误导。 print(list)的结果不能是Int的数组,因为所有属性列表键都必须为String

其次,请勿使用NSDictionary相关API从磁盘读取属性列表,而是使用DataPropertyListSerialization

要对字符串键进行数字排序,请使用localizedStandardCompare

let url = Bundle.main.url(forResource: "SomePlistFile", withExtension: "plist")!
let data = try! Data(contentsOf: url)
let list = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String:Any]
let sortedList = list.keys.sorted{ $0.localizedStandardCompare($1) == .orderedAscending }
print(sortedList)