首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有办法快速迭代元组吗?

有办法快速迭代元组吗?
EN

Stack Overflow用户
提问于 2014-06-19 04:56:37
回答 5查看 23.1K关注 0票数 54

我很好奇如何用一个快速的元组做一个for循环。

我知道要访问每个成员,可以使用使用索引号的点符号。

代码语言:javascript
运行
复制
var tupleList = ("A",2.9,3,8,5,6,7,8,9)

for each in tupleList {
    println(each)
}

//Error:类型不符合协议序列

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-18 18:34:49

可以,停那儿吧!

代码语言:javascript
运行
复制
func iterate<C,R>(t:C, block:(String,Any)->R) {
    let mirror = reflect(t)
    for i in 0..<mirror.count {
        block(mirror[i].0, mirror[i].1.value)
    }
}

然后瞧!

代码语言:javascript
运行
复制
let tuple = ((false, true), 42, 42.195, "42.195km")
iterate(tuple) { println("\($0) => \($1)") }
iterate(tuple.0){ println("\($0) => \($1)")}
iterate(tuple.0.0) { println("\($0) => \($1)")} // no-op

注意,最后一个不是元组,所以不会发生任何事情(虽然它是一个1元组或“单一”的内容可以访问.0reflect(it).count是0)。

有趣的是,iterate()甚至可以迭代其他类型的集合。

代码语言:javascript
运行
复制
iterate([0,1])              { println("\($0) => \($1)") }
iterate(["zero":0,"one":1]) { println("\($0) => \($1)") }

其中包括classstruct

代码语言:javascript
运行
复制
struct Point { var x = 0.0, y = 0.0 }
class  Rect  { var tl = Point(), br = Point() }
iterate(Point()) { println("\($0) => \($1)") }
iterate(Rect())  { println("\($0) => \($1)") }

注意:作为块的第二个参数传递的值是Any类型。您必须将其转换回原始类型的值。

票数 47
EN

Stack Overflow用户

发布于 2018-05-19 11:22:33

您可以使用反射Swift 5

在游乐场里试试这个:

代码语言:javascript
运行
复制
let tuple = (1, 2, "3")
let tupleMirror = Mirror(reflecting: tuple)
let tupleElements = tupleMirror.children.map({ $0.value })
tupleElements

输出:

票数 23
EN

Stack Overflow用户

发布于 2014-06-19 05:25:33

Swift目前不支持对元组进行迭代。

最大的原因是:

  1. 在运行时无法确定元组中的元素数。
  2. 除了编译时访问器(如tupleList.0 )之外,无法在特定索引上访问元素。您可能真的想要一个下标tupleList[0],但是没有提供给我们。

坦率地说,如果您想要迭代元组,那么我看不出您使用元组而不是Array的原因。

迭代元组是没有意义的,因为:

  1. 元组的长度总是固定的,每个元素都有固定的类型。
  2. 您可以将每个元组成员命名为您以后可以访问它的名称。

数组可以很好地迭代:

  1. 任意长度
  2. 可以使用公共超类或AnyObject存储多个类型。
  3. 可以以类似于元组的方式声明为文字:var list = ["A",2.9,3,8,5,6,7,8,9]
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24299045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档