如何在Swift中将2D数组变量分配给大的浮动矩阵?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift中将2D数组变量分配给大的浮动矩阵?相关的知识,希望对你有一定的参考价值。
我需要在Swift中存储并经常使用几个相对较大的矩阵(准确地说,每个矩阵为160 x 128)。为了初始化一个恒定的2D Double数组以保存该矩阵,我编写了如下内容: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。这里有一些问题,我将尝试解决所有问题:
没有二维数组
[Technically,Swift没有2D数组(直到您实现一个)。您要描述的是嵌套数组,它们的特性略有不同:
ViewController应该做什么
它应该控制视图。对我来说,存储160x128矩阵听起来不像是“控制视图”,因此,对于将这样的代码放在这里完全不适合]
编译大表达式
没有类型提示,Swift类型检查器将在我们的代码中推断正在播放的类型。例如,虽然[[1, 2, 3], [4, 5, 6]]
看起来很像Array<Array<Int>>
,但实际上,它可以用来初始化ArraySlice<Set<Double>>
,如果上下文需要的话。
在Swift中,文字表达式可以具有多种类型之一。实际上,用于Array的方括号语法可用于初始化符合ExpressibleByArrayLiteral
的任何类型(例如Set
,ArraySlice
或您自己发明的任何此类)。同样,整数文字可用于初始化符合ExpressibleByIntegerLiteral
的任何类型,例如Float
,Double
和(U)Int(64|32|16|8)
的每个变体。总而言之,数组文字的lot可能是可能的类型,这会使类型检查器花很长时间才能求值。
您可以通过完全指定类型来帮助此操作(例如,在变量let matrix: [[Double]] = [ ... ]
上提供类型提示。但即使这样,此数据仍然太大,无法放入Swift文件中。
使用序列化格式
...是正确的方法。在这种情况下,我认为CSV可能是最合适的(它非常适合存储像这样的方形表格数据)。您说您“检查了” XML”,“ plist”和“ CSV”文件格式”(我不知道“检查”在这里是什么意思),并且“其中一些对我有用”(对< [you?是什么意思,代码中有一些校验if (user == Serhat) dontWork()
?)。这是一个好的解决方案的正确方法。如果您被困在那里,则应该发布一个问题,详细说明出了什么问题,以便其他人实际上可以为您提供帮助。
以上是关于如何在Swift中将2D数组变量分配给大的浮动矩阵?的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。
如何在 swift 中将子类 NSManagedObject 分配给 var(而不是常量)
如何在 iOS 的 swift 中将浮动操作按钮放在 tableView 中?