【问题标题】:Address each dimension of a 3-D array in swift快速处理 3-D 数组的每个维度
【发布时间】:2017-11-24 22:25:51
【问题描述】:

过去几天我一直在尝试学习如何在 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 的经验很少,这就是为什么我要问你如何解决每个单独的维度。

【问题讨论】:

  • 由于您的代码无法编译,现在很容易理解您想要做什么。看来您正在构建一个 5 x 5 x 5 数组。您能描述一下应该如何填充通用单元格(i, j, k) 吗?
  • 我希望它是这样的:brand:engine:gas mileage 所以它看起来像这样对于第一个维度和所有其他单元格 (ford, 2.0, 30), (ford, 2.5, 25), (ford, 3.4, 20), (ford, 4.0, 15), (ford, 5.0, 10) 我没有添加 6 个值gas_mile 数组,我的意思是 5 x 5 x 5 数组
  • 将您的 3 个组件包装到一个名为 MyIndex 的对象/结构中。使其成为Hashable,创建字典[MyIndex: String]。这对你有用吗?
  • 我不确定,就像我说的我对 swift 没有什么经验,所以我会研究一下。感谢您对此的投入并为我的问题提供解决方案。我只是认为用 for-in-loop 解决它会更容易,但我错了。

标签: arrays swift multidimensional-array for-in-loop


【解决方案1】:

这是一个可能的解决方案

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

【讨论】:

  • 太棒了,非常感谢。我非常感谢对其工作原理和描述的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2014-02-19
  • 2011-08-30
相关资源
最近更新 更多