Arrays 如何将数组转换为元组?
我只想在Swift中将数组转换成元组;如下所示:Arrays 如何将数组转换为元组?,arrays,swift,type-conversion,tuples,Arrays,Swift,Type Conversion,Tuples,我只想在Swift中将数组转换成元组;如下所示: >>> myArray = [1,2,3,4,5] >>> mytuple = tuple(myArray) >>> mytuple (1, 2, 3, 4, 5) 最简单的方法是什么 (我今天才开始学习Swift,所以我是非常非常新的)。你不能这样做,因为元组的大小是其类型的一部分,而数组则不是这样。如果知道数组的长度,只需执行让myTuple=(myArray[0],myArray[1]
>>> myArray = [1,2,3,4,5]
>>> mytuple = tuple(myArray)
>>> mytuple
(1, 2, 3, 4, 5)
最简单的方法是什么
(我今天才开始学习Swift,所以我是非常非常新的)。你不能这样做,因为元组的大小是其类型的一部分,而数组则不是这样。如果知道数组的长度,只需执行
让myTuple=(myArray[0],myArray[1],…)
。也可以从一开始就围绕元组构建体系结构。你想干什么
这是许多其他语言中常见的问题。请看如果你愿意做一些低级魔术,这实际上是很有可能的。但是,我认为如果元组具有集合类型,则它不起作用。这主要用于与C库交互
typealias TupleType = (UInt8, UInt8, UInt8)
var array = [2, 3, 4] as [UInt8]
var tuple = UnsafeMutablePointer<StepsType>(malloc(UInt(sizeof(TupleType))))
memcpy(tuple, array, UInt(array.count))
typealias TupleType=(UInt8、UInt8、UInt8)
变量数组=[2,3,4]为[UInt8]
var tuple=unsafemeutablepointer(malloc(UInt(sizeof(TupleType)))
memcpy(元组、数组、UInt(array.count))
更多此类内容可在此处找到:
因为我们中有70%是高度视觉化的生物:
害怕不安全的指针吗?或者需要支持内部具有不同类型的元组 也可以这样做:
public extension Array {
public var tuple: Any? {
switch count {
case 0:
return ()
case 1:
return (self[0])
case 2:
return (self[0], self[1])
case 3:
return (self[0], self[1], self[2])
case 4:
return (self[0], self[1], self[2], self[3])
case 5:
return (self[0], self[1], self[2], self[3], self[4])
default:
return nil
}
}
因为输入这个可能有点容易出错,所以最好确保返回正确的元组
我曾在一个项目中使用过这种方法
因此,您不必自己编写此功能,只需将
pod'ArrayPlusTuple'
添加到您的pod文件中,即可免费获得此测试功能。如果您想同时从数组中提取多个值,可能
下面的代码可以帮助您
扩展数组{
func splat()->(元素,元素){
返回(self[0],self[1])
}
func splat()->(元素,元素,元素){
返回(self[0]、self[1]、self[2])
}
func splat()->(元素,元素,元素,元素){
返回(self[0]、self[1]、self[2]、self[3])
}
func splat()->(元素,元素,元素,元素,元素,元素){
返回(self[0]、self[1]、self[2]、self[3]、self[4])
}
}
那么你可以这样使用它
let(first,u,third)=(0..这是我将数组数据复制到元组的通用解决方案。我唯一无法解决的问题是检查元组中元素的类型和数组中元素的类型
/// Unsafe copy array to tuple
func unsafeCopyToTuple<ElementType, Tuple>(array: inout Array<ElementType>, to tuple: inout Tuple) {
withUnsafeMutablePointer(to: &tuple) { pointer in
let bound = pointer.withMemoryRebound(to: ElementType.self, capacity: array.count) { $0 }
array.enumerated().forEach { (bound + $0.offset).pointee = $0.element }
}
}
///不安全地将数组复制到元组
func unsafecopytuple(数组:inout数组,to tuple:inout tuple){
WithUnsafemtablepointer(指向:&元组){中的指针
let bound=pointer.withMemoryRebound(to:ElementType.self,capacity:array.count){$0}
array.enumerated().forEach{(绑定+0.offset).pointee=$0.element}
}
}
不想构建任何东西,只是好奇而已。谢谢你的帮助。