Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Swift中创建具有两种变量类型的二维数组_Arrays_Swift_Multidimensional Array - Fatal编程技术网

Arrays 在Swift中创建具有两种变量类型的二维数组

Arrays 在Swift中创建具有两种变量类型的二维数组,arrays,swift,multidimensional-array,Arrays,Swift,Multidimensional Array,您可以使用以下工具在swift中创建一种类型变量的二维数组: var array2D: [[String]] = [["hi", "bye"], ["hello", "goodbye"]] 我想创建一个二维数组,其中第二个变量为Float,沿以下几行: var array2d2types = [[String,Float]] = [["height",1],["width",2]] 但这会产生错误:无法分配给“[[Any]]”类型的不可变表达式。 如何创建一个数组数组,每个数组都有一个字符串

您可以使用以下工具在swift中创建一种类型变量的二维数组:

var array2D: [[String]] = [["hi", "bye"], ["hello", "goodbye"]]
我想创建一个二维数组,其中第二个变量为Float,沿以下几行:

var array2d2types = [[String,Float]] = [["height",1],["width",2]]
但这会产生错误:
无法分配给“[[Any]]”类型的不可变表达式。


如何创建一个数组数组,每个数组都有一个字符串和一个浮点?

Swift数组是同构的,因此不能在同一数组中存储不同类型的元素。但是,可以使用元组数组而不是嵌套数组来实现目标

let array: [(String,Float)] = [("height",1),("width",2)]
可以使用正常的下标语法访问元组

let firstTuple = array[0]
以及使用点语法的元组元素

let height = firstTuple.0
let heightValue = firstTuple.1

但是,您应该使用自定义结构或更好的内置
CGSize
来存储高度-宽度值。

Swift数组是同质的,因此不能在同一数组中存储不同类型的元素。但是,可以使用元组数组而不是嵌套数组来实现目标

let array: [(String,Float)] = [("height",1),("width",2)]
可以使用正常的下标语法访问元组

let firstTuple = array[0]
以及使用点语法的元组元素

let height = firstTuple.0
let heightValue = firstTuple.1

但是,您应该使用自定义结构,或者更好地使用内置的
CGSize
来存储高度-宽度值。

如果要存储各种类型,您应该使用自定义
struct
。这样做的另一个好处是,您可以使用有意义的名称而不仅仅是索引来访问这些值:

struct Record {
    var string: String
    var float: Float

    // Structs give you an init for free, but require you to list the names.
    // For conciseness I created this func to make it closer to your example
    static func i(_ string: String, _ float: Float) -> Record {
        return Record(string: string, float: float)
    }
}

var records: [Record] = [.i("height",  1), .i("width", 2)]

print(records[0].string)  // "height"
print(records[0].float)   // 1.0

如果要存储各种类型,应使用自定义的
结构。这样做的另一个好处是,您可以使用有意义的名称而不仅仅是索引来访问这些值:

struct Record {
    var string: String
    var float: Float

    // Structs give you an init for free, but require you to list the names.
    // For conciseness I created this func to make it closer to your example
    static func i(_ string: String, _ float: Float) -> Record {
        return Record(string: string, float: float)
    }
}

var records: [Record] = [.i("height",  1), .i("width", 2)]

print(records[0].string)  // "height"
print(records[0].float)   // 1.0

改为使用元组(或自定义结构)。Leo,我尝试从任意向下转换为浮点,但遇到了问题。不要这样做,我建议您使用CGSize对象数组
let size:[CGSize]=[.init(宽度:2,高度:1)]
使用宽度和高度可能会产生误导,这些可能是任何字符串
,为什么不笼统地考虑一下,你将如何处理应用程序流中的键名???使用元组(或自定义结构)。Leo,我尝试从任意向下转换为浮动,但遇到了问题。如果不这样做,我建议您使用CGSize对象数组
let size:[CGSize]=[.init(宽度:2,高度:1)]
使用宽度和高度可能会产生误导,这些可能是任何字符串
,为什么不笼统地考虑它们?如何处理应用程序流中的关键字名称???我将如何访问它们?是否使用数组[0]访问一个元组?我可以访问高度/宽度为let mystring=array[0][0]和1/2为let myfloat=array[0][1]
let mystring=array[0]。0
let myfloat=array[0]。1
太棒了!谢谢,我该如何访问这些?是否使用数组[0]访问一个元组?我可以访问高度/宽度为let mystring=array[0][0]和1/2为let myfloat=array[0][1]
let mystring=array[0]。0
let myfloat=array[0]。1
太棒了!非常感谢。