在 swift 中解决 3-D 数组的每个维度
Address each dimension of a 3-D array in swift
过去几天我一直在尝试学习如何将数据插入 swift 中的 3-D 数组中的每个索引。我试图通过 for-in 循环填充 3-D 数组。我知道这个例子是不正确的,因为当我试图为数组放置一个值时,我没有处理数组中的每个维度,但我不知道如何表达我的意思:
var arr = [[[String]]]()
var brand = ["ford", "dodge", "toyota", "ford", "Nissan"]
var engine = ["2.0", "2.5", "3.4", "4.0", "5.0"]
var gas_mile = ["30", "25", "20", "15", "10"]
for index_1 in 1...brand.count{
arr[index_1] = brand[index_1]
for index_2 in 1...engine.count{
arr[index_1][index_2] = engine[index_2]
for index_3 in 1...gas_mile.count{
arr[index_1][index_2][index_3] = gas_mile[index_3]
}
}
}
我知道你需要为数组的每个维度创建一个索引 ex:
arr[0][0][0] = gas_mile[0]
但我不知道您随后如何向数组的第一维添加内容,因为 swift 编译器需要添加一个二维数组 ([[String]]),不是单个值:
arr[0] = brand[0]
所以我很困惑如何在向数组添加值时处理数组的第一维或第二维。我对 swift 没有什么经验,这就是为什么我要问你如何解决每个单独的维度。
这是一个可能的解决方案
struct Archive {
private var dict = [String:[String:Int]]()
func miles(byBrand brand: String, andEngine engine: String) -> Int? {
return dict[brand]?[engine]
}
mutating func set(miles: Int, forBrand brand: String, andEngine engine:String) {
var milesDict = dict[brand] ?? [String:Int]()
milesDict[engine] = miles
dict[brand] = milesDict
}
}
它是如何工作的?
如您所见,数据存储在一个字典中,其中键是 brand name
,值是另一个字典,它的键是引擎,值是英里。
如何使用
第 1 步:创建您的 Archive
价值
var archive = Archive()
第 2 步:存储数据
archive.set(miles: 1, forBrand: "Ford", andEngine: "2.0")
archive.set(miles: 2, forBrand: "Ford", andEngine: "3.0")
archive.set(miles: 3, forBrand: "Ford", andEngine: "4.0")
archive.set(miles: 4, forBrand: "Ford", andEngine: "5.0")
archive.set(miles: 5, forBrand: "Audi", andEngine: "2.0")
第三步:读取数据
archive.miles(byBrand: "Ford", andEngine: "2.0") // 1
archive.miles(byBrand: "Ford", andEngine: "3.0") // 2
archive.miles(byBrand: "Ford", andEngine: "4.0") // 3
archive.miles(byBrand: "Ford", andEngine: "5.0") // 4
archive.miles(byBrand: "Audi", andEngine: "3.0") // 5
过去几天我一直在尝试学习如何将数据插入 swift 中的 3-D 数组中的每个索引。我试图通过 for-in 循环填充 3-D 数组。我知道这个例子是不正确的,因为当我试图为数组放置一个值时,我没有处理数组中的每个维度,但我不知道如何表达我的意思:
var arr = [[[String]]]()
var brand = ["ford", "dodge", "toyota", "ford", "Nissan"]
var engine = ["2.0", "2.5", "3.4", "4.0", "5.0"]
var gas_mile = ["30", "25", "20", "15", "10"]
for index_1 in 1...brand.count{
arr[index_1] = brand[index_1]
for index_2 in 1...engine.count{
arr[index_1][index_2] = engine[index_2]
for index_3 in 1...gas_mile.count{
arr[index_1][index_2][index_3] = gas_mile[index_3]
}
}
}
我知道你需要为数组的每个维度创建一个索引 ex:
arr[0][0][0] = gas_mile[0]
但我不知道您随后如何向数组的第一维添加内容,因为 swift 编译器需要添加一个二维数组 ([[String]]),不是单个值:
arr[0] = brand[0]
所以我很困惑如何在向数组添加值时处理数组的第一维或第二维。我对 swift 没有什么经验,这就是为什么我要问你如何解决每个单独的维度。
这是一个可能的解决方案
struct Archive {
private var dict = [String:[String:Int]]()
func miles(byBrand brand: String, andEngine engine: String) -> Int? {
return dict[brand]?[engine]
}
mutating func set(miles: Int, forBrand brand: String, andEngine engine:String) {
var milesDict = dict[brand] ?? [String:Int]()
milesDict[engine] = miles
dict[brand] = milesDict
}
}
它是如何工作的?
如您所见,数据存储在一个字典中,其中键是 brand name
,值是另一个字典,它的键是引擎,值是英里。
如何使用
第 1 步:创建您的 Archive
价值
var archive = Archive()
第 2 步:存储数据
archive.set(miles: 1, forBrand: "Ford", andEngine: "2.0")
archive.set(miles: 2, forBrand: "Ford", andEngine: "3.0")
archive.set(miles: 3, forBrand: "Ford", andEngine: "4.0")
archive.set(miles: 4, forBrand: "Ford", andEngine: "5.0")
archive.set(miles: 5, forBrand: "Audi", andEngine: "2.0")
第三步:读取数据
archive.miles(byBrand: "Ford", andEngine: "2.0") // 1
archive.miles(byBrand: "Ford", andEngine: "3.0") // 2
archive.miles(byBrand: "Ford", andEngine: "4.0") // 3
archive.miles(byBrand: "Ford", andEngine: "5.0") // 4
archive.miles(byBrand: "Audi", andEngine: "3.0") // 5