快速将NSDictionaries写入文件有局限性。根据我从api文档中学到的知识和这个答案,键类型应该是NSString,值类型也应该是NSx类型,并且Int,String和其他swift类型可能不起作用。问题是,如果我有一个像这样的字典:Dictionary<Int,Dictionary<Int, MyOwnType>>
如何快速将其写入plist文件或从plist文件读取?
无论如何,当您要存储MyOwnType
到文件时,它MyOwnType
必须是协议的子类NSObject
并符合NSCoding
协议。像这样:
class MyOwnType: NSObject, NSCoding {
var name: String
init(name: String) {
self.name = name
}
required init(coder aDecoder: NSCoder) {
name = aDecoder.decodeObjectForKey("name") as? String ?? ""
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "name")
}
}
然后,这里是Dictionary
:
var dict = [Int : [Int : MyOwnType]]()
dict[1] = [
1: MyOwnType(name: "foobar"),
2: MyOwnType(name: "bazqux")
]
所以,这是您的问题:
将快速字典写入文件
您可以NSKeyedArchiver
用来写和NSKeyedUnarchiver
阅读:
func getFileURL(fileName: String) -> NSURL {
let manager = NSFileManager.defaultManager()
let dirURL = manager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false, error: nil)
return dirURL!.URLByAppendingPathComponent(fileName)
}
let filePath = getFileURL("data.dat").path!
// write to file
NSKeyedArchiver.archiveRootObject(dict, toFile: filePath)
// read from file
let dict2 = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as [Int : [Int : MyOwnType]]
// here `dict2` is a copy of `dict`
但在您的问题中:
如何快速将其写入 plist 文件或从中读取?
实际上,NSKeyedArchiver
format是二进制plist。但是,如果你想要的字典 作为plist中的一个值
,你可以序列化Dicthtml" target="_blank">ionary
到NSData
用NSKeyedArchiver
:
// archive to data
let dat:NSData = NSKeyedArchiver.archivedDataWithRootObject(dict)
// unarchive from data
let dict2 = NSKeyedUnarchiver.unarchiveObjectWithData(data) as [Int : [Int : MyOwnType]]
我在做一个CSC 110项目。尽管我们还没有学过字典,我还是试着用字典来完成我们的作业。 我有一份国家和他们赢得多少奖牌的档案,用新的行字符隔开。例如: 虽然这是有效的,但它是肮脏和过于复杂。我正想出一个新方法来做这件事。
问题内容: 我认为我应该完成一项我似乎无法解决的非常简单的任务。 如何将Python字典写入csv文件?我想要的只是将字典键写入文件的第一行,并将键值写入第二行。 我最接近的是以下内容(我是从别人的帖子中获得的): 问题是,上面的代码似乎只将密钥写入第一行,仅此而已。我没有将值写入第二行。 有任何想法吗? 问题答案: 您使用的是期望字典列表而不是字典的列表。您只想DictWriter.writer
问题内容: 我正在努力将列表字典写入.csv文件。 这是我的字典的样子: 我希望.csv文件看起来像: 首先,我写标题: 到目前为止很好…但是,我的问题是我不知道如何将一个列表分配给相应的列。例如: 将随机填充列。另一个问题是,我必须手动填写键,并且不能将其用于具有4个键的另一本词典。 问题答案: 如果您不关心列的顺序(因为字典是无序的),则可以简单地使用: 结果: 如果您确实关心订单,则需要对键
问题内容: 我正在尝试复制在目标C中执行的for循环,但遇到“’AnyObject’没有名为’GeneratorType’的成员错误: 这是我的雨燕 我试过为字典定义一个holder变量。任何人都可以看到我在做什么错吗? 问题答案: 这不是字典的循环。它循环通过存储在其中一个字典键中的数组。例如,如果您有一个字符串数组作为字典的键之一,这就是想要做的事情。 如果您确实想只遍历字典,这在Swift中
问题内容: 这个问题已经在这里有了答案 : 水平写CSV (2个答案) 6年前关闭。 多亏了另一个线程,我才以Python初学者的身份成功地将字典写到了csv中:将字典写到 csv文件中,每个“键:值”一行] csv看起来像这样: 现在,我想知道用相同的键组织多个词典的最佳方法是什么。我希望将键作为第一列,然后在其后的各列中使用dict值,所有这些都具有第一行以按字典名称区分各列。 当然,有很多线
问题内容: 我找到了一个解决方案,但确实很慢: 您有没有使用外部模块(numpy等)的任何想法? 问题答案: 由于字典很大,因此最好将所有涉及的项都保留为迭代器和生成器,像这样 样品运行: 输出量