我需要在 Swift 中存储并经常使用几个相对较大的矩阵(每个 160 x 128,准确地说)。为了初始化一个恒定的2D双阵列来保存矩阵,我写了这样的事情:let myMatrix = [[3.2, 5.8976, 5.2], [1e-4, 0.3, 8.56]]
。这个 2 x 3 阵列只是一个例子。当您尝试编写 160 x 128 浮点矩阵时,需要很多行。我使用专门为此编写的 MATLAB 脚本输入了这个长表达式。但是,当我复制粘贴这个大矩阵的很长的表达式时,XCode 停止响应。它无法处理“ViewController.swift”文件中如此大的数据行。因此,我需要找到另一种方法将我的矩阵存储在 iPhone 应用程序中。我已经检查了要使用的“XML”、“plist”和“CSV”文件格式。不幸的是,这些都不适合我。
欢迎使用 StackOverflow。这里有几个问题在起作用,我将尝试解决所有问题:
从技术上讲,Swift 没有 2D 数组(直到你实现了一个)。您所描述的是嵌套数组,它们的特征略有不同:
它具有较差的性能特征,因为它是一个数组数组,而不是一个包含所有元素的连续数组。也就是说,它存储...
它应该控制视图。存储 160x128 矩阵对我来说听起来不像“控制视图”,因此,将此类代码放在那里是完全不合适的
在没有类型提示的情况下,Swift 类型检查器将用于推断我们代码中的类型。例如,虽然[[1, 2, 3], [4, 5, 6]]
显然看起来像 an Array<Array<Int>>
,但它实际上可以用于初始化 a ArraySlice<Set<Double>>
,如果这是上下文所要求的。
在 Swift 中,文字表达式可以是多种类型中的一种。用于阵列方括号语法实际上可以用于初始化任何类型的符合ExpressibleByArrayLiteral
(例如Set
,ArraySlice
或任何这样的类型你发明自己)。同样,整数常量可以被用于初始化的任何类型的符合ExpressibleByIntegerLiteral
,例如Float
,Double
,和的每一个变体(U)Int(64|32|16|8)
。总之,一个数组字面量有很多可能的类型,这需要类型检查器很长时间来评估。
您可以通过完全指定类型(例如给予的变量类型提示帮助这个沿:let matrix: [[Double]] = [ ... ]
但即使是,这个数据远远太大,可适当放入斯威夫特文件。
......是正确的方法。在这种情况下,我认为 CSV 可能是最合适的(它非常擅长存储这样的方形表格数据)。您说您“检查了“XML”、“plist”和“CSV”文件格式”(我不知道“检查”在这里是什么意思)并且“对我有用”(对您不起作用)? 这是什么意思,代码有一些检查if (user == Serhat) dontWork()
?)。这是一个好的解决方案的正确方法。如果你被困在那里,你应该发布一个问题,提供更多关于到底出了什么问题的细节,以便其他人可以真正帮助你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句