Ios 在swift中将[Int]转换为(Int),反之亦然
如何转换整型数组Ios 在swift中将[Int]转换为(Int),反之亦然,ios,arrays,swift,Ios,Arrays,Swift,如何转换整型数组 let beforeSorting = [1, 2, 3, 4, 0, 6, 7, 8, 9, 10] 到 在swift中也是相反的吗 脚本 我想对这些值应用一些操作,所以我将这些值转换为数组形式 let array = [a, b, c,..] // counting 20 elements 在应用一些操作之后,例如排序。我需要将这些值放回属性 所以我用这些属性做了一个元组。这是我的问题。如何将新数组分配给tuple。(一次设置所有属性) 就像(a,b,c,d…)=mya
let beforeSorting = [1, 2, 3, 4, 0, 6, 7, 8, 9, 10]
到
在swift中也是相反的吗
脚本
我想对这些值应用一些操作,所以我将这些值转换为数组形式
let array = [a, b, c,..] // counting 20 elements
在应用一些操作之后,例如排序。我需要将这些值放回属性
所以我用这些属性做了一个元组。这是我的问题。如何将新数组分配给tuple。(一次设置所有属性)
就像
(a,b,c,d…)=myarray
元组必须具有预定义的大小和类型。所以,你所能做的就是拥有一些便利,这些便利可以通过多种方式实现。例如,您可以创建一个包装器:
typealias MyTuple = (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int)
class ToupleWrapper {
private var values: [Int]
init(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {
values = [a, b, c, d, e, f]
}
convenience init(array: [Int]) {
self.init(a: array[0], b: array[1], c: array[2], d: array[3], e: array[4], f: array[5])
}
convenience init(tuple: MyTuple) {
self.init(a: tuple.a, b: tuple.b, c: tuple.c, d: tuple.d, e: tuple.e, f: tuple.f)
}
var array: [Int] {
return values
}
var tuple: MyTuple {
return (values[0], values[1], values[2], values[3], values[4], values[5])
}
}
使用方法:
func foo() {
let arrayFromValue = ToupleWrapper(a: 3, b: 2, c: 1, d: 4, e: 2, f: 2).array
let arrayFromTouple = ToupleWrapper(tuple: (0, 1, 3, 2, 4, 2)).array
let tupleFromArray = ToupleWrapper(array: [2, 3, 1, 4, 2, 2]).tuple
}
不,你不能以安全的方式这样做。元组具有在编译时已知的固定长度,而数组的长度是在运行时获得的
将元组转换为数组是可能的,但前提是所有元组元素都是相同类型或具有公共类型-您只需引用.0。10个元素。为什么要将
数组
转换为元组
,反之亦然?即使这样做有意义,也没有简单的方法,因为您无法动态创建特定大小的元组,这与数组不同。我想从数组中分配一些属性值,因为在我的编辑器中,这似乎是一个XY问题。你的确切目标是什么?@Saranjith如果没有更多的上下文,你编辑的代码就毫无意义。为什么变量存储在元组中?如何创建该元组?为什么不直接将变量添加到数组中,而不是将它们添加到元组中呢?Int是值类型,因此无法将值设置到数组中,并在数组重新排列后从数组中获取值。考虑在单独的结构式答案中包装每一个值。非常感谢。有什么简单的方法可以做到这一点吗。当20个属性到来时,这将成为messy@Saranjith不是元组。也许,如果您将所有关于如何使用此函数的情况都添加到示例中,我们可能会找到更好的解决方案。请注意,如果数组小于10,则初始值设定项将崩溃elements@Cristik是的,我实际上在考虑一些默认设置,但需要另一种方法,使答案不可读。。。或者每个属性都像b:array.count>1那样执行?数组[1]:0正确的答案可能是一个先决条件(如果使用错误大小的数组调用它被视为程序员错误),也可能是一个失败的初始值设定项(可能是init?
)。默认值几乎肯定会打破这种转换的界限,使其很难实现通用性(这目前非常容易)。
typealias MyTuple = (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int)
class ToupleWrapper {
private var values: [Int]
init(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {
values = [a, b, c, d, e, f]
}
convenience init(array: [Int]) {
self.init(a: array[0], b: array[1], c: array[2], d: array[3], e: array[4], f: array[5])
}
convenience init(tuple: MyTuple) {
self.init(a: tuple.a, b: tuple.b, c: tuple.c, d: tuple.d, e: tuple.e, f: tuple.f)
}
var array: [Int] {
return values
}
var tuple: MyTuple {
return (values[0], values[1], values[2], values[3], values[4], values[5])
}
}
func foo() {
let arrayFromValue = ToupleWrapper(a: 3, b: 2, c: 1, d: 4, e: 2, f: 2).array
let arrayFromTouple = ToupleWrapper(tuple: (0, 1, 3, 2, 4, 2)).array
let tupleFromArray = ToupleWrapper(array: [2, 3, 1, 4, 2, 2]).tuple
}