数组 – Swift:具有多个键的关联数组:值

数组 – Swift:具有多个键的关联数组:值,第1张

概述我不是 Swift的专家,我已经使用它几个月来构建Mac应用程序.我想在内存中表示一个类似于 PHP关联数组的数据结构,但在Swift中.让我们假设我有一个数据表要在内存中加载以下字段/记录: ID Surname Name1 XXX YYY2 ZZZ WWW3 JJJ KKK 我想要获得的是一个关联数组,就像我在PHP中可以获得的那样: $arr[1]["Su @H_419_2@ 我不是 Swift的专家,我已经使用它几个月来构建Mac应用程序.我想在内存中表示一个类似于 PHP关联数组的数据结构,但在Swift中.让我们假设我有一个数据表要在内存中加载以下字段/记录:

ID Surname name1  XXX     YYY2  ZZZ     WWW3  JJJ     KKK

我想要获得的是一个关联数组,就像我在PHP中可以获得的那样:

$arr[1]["Surname"] = "XXX"$arr[1]["name"] = "YYY"$arr[2]["Surname"] = "ZZZ"$arr[2]["name"] = "WWW"

我只是在Swift中找不到合适的数据结构来获得相同的结果.我尝试使用以下代码:

class resObject: NSObject {    private var cvs = [Int: [String: String]]()    overrIDe init() {        self.cvs[0] = ["name" : "XXX"]        self.cvs[0] = ["Surname" : "YYY"]        self.cvs[1] = ["name" : "ZZZ"]        self.cvs[1] = ["Surname" : "WWW"]        for (key,arr) in cvs {            let sur = arr["Surname"]            let nam = arr["name"]            println("Row \(key) - Surname: \(sur),name: \(nam)")        }        super.init()    }}

它看起来非常接近,但它不起作用.我在输出中得到的是以下内容(我不关心“Optional(s)”:

Row 0 - Surname: Optional("XXX"),name: nilRow 1 - Surname: Optional("ZZZ"),name: nil

我尝试在调试中进行一些测试,我注意到保存在内存中的数据只是最后一个键:使用的值对(即如果我首先指定Surname而name指定第二个,我将Surname指定为nil,将name指定为正确的值).

请注意,在示例中,我在声明变量时不知道数据结构,因此我将其声明为空并稍后以编程方式填充它.

我不知道是不是我没有正确地声明数据结构,或者它是不是允许这样做的Swift.任何帮助将不胜感激.

非常感谢.
问候,
阿莱西奥

解决方法 一种方法是结构词典.考虑:

struct Person {    var firstname: String    var lastname: String}var peopleByID = [ Int: Person ]()peopleByID[1] = Person(firstname: "First",lastname: "Last")peopleByID[27] = Person(firstname: "Another",lastname: "Lastname")var myID = 1 // Try changing this to 2 laterif let p = peopleByID[myID] {    println("Found: \(p.firstname) with ID: \(myID)")}else {    println("No one found with ID: \(myID)")}

然后,您可以更新结构:

peopleByID[1].firstname = "XXX"peopleByID[27].lastname = "ZZZ"

你可以自由迭代:

for p in peopleByID.keys {    println("Key: \(p) value: \(peopleByID[p]!.firstname)")}

请注意,仅仅[Person]数组不是那么热,因为ID:

– 可能不是Ints,但通常是字符串

– 即使它们仍然是Ints,数组占用与最高编号索引成比例的存储,而Dictionary只占存储与存储对象数量成比例.想象一下只存储两个ID:523123和2467411.

编辑

看起来您不会提前知道每个Person对象的属性.这很奇怪,但你应该这样做:

struct Person {    var attributes = [String : String]() // A dictionary of String keys and String values}var peopleByID = [ Int : Person ]()// and then:var p1 = Person()var p2 = Person()p1.attributes["Surname"] = "Somename"p1.attributes["name"] = "Firstname"p2.attributes["Address"] = "123 Main St."peopleByID[1] = p1peopleByID[2] = p2if let person1 = peopleByID[1] {    println(person1.attributes["Surname"]!)    for attrKey in person1.attributes.keys {        println("Key: \(attrKey) value: \(person1.attributes[attrKey]!)")    }}
@H_419_2@ 总结

以上是内存溢出为你收集整理的数组 – Swift:具有多个键的关联数组:值全部内容,希望文章能够帮你解决数组 – Swift:具有多个键的关联数组:值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1009603.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存