当前位置: 首页 > 面试题库 >

有什么办法可以快速迭代一个元组吗?

羊舌诚
2023-03-14
问题内容

我很好奇如何快速进行元组的for循环

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

var tupleList = ("A",2.9,3,8,5,6,7,8,9)

for each in tupleList {
    println(each)
}

//错误:类型不符合协议顺序


问题答案:

是的你可以!

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)
    }
}

瞧!

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()它甚至可以迭代其他类型的集合。

iterate([0,1])              { println("\($0) => \($1)") }
iterate(["zero":0,"one":1]) { println("\($0) => \($1)") }

并且该集合包括classstruct

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)") }

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



 类似资料:
  • 问题内容: 我想知道是否有一种更快,更省时的方法来遍历元组列表,找到合适的匹配项。我要做的是: 根据列表中项目的数量,此代码可能需要花费一些时间才能执行。我敢肯定有更好的方法可以做到这一点。 问题答案: 假设更多的内存使用不是问题,并且如果元组的第一项是可哈希的,则可以从元组列表中创建字典,然后查找值就像从中查找键一样简单。就像是: 编辑 :要创建一个反向映射,请使用类似:

  • 问题内容: 据说Java在性能方面比python快10倍。我也从基准测试中看到了这一点。但是真正使Java崩溃的是JVM的启动时间。 这是我做的测试: 相同的文件,Docx和Python中的12 KB ms XLSX嵌入式文件快25倍!WTH! Java需要2.055秒。 我知道这都是由于启动时间造成的,但是我需要通过脚本调用它来解析一些我不想重新发明python的文档。 但是对于解析10k +文

  • 我一直在关注快板5平台和他的文件管理器使用的教程!openFile.eof(),我听说它不好,我很确定它是什么让我的矢量下标超出范围错误。除了它,还有什么我可以使用的吗?另外,你能检查一下我的图层类,以防我的矢量下标超出范围错误吗?我想不出来,我很确定它来自文件管理器,但我不知道。 它仅输出地图的第一行。当我把它改成“而”(标准:::getline(打开文件,行))时,我甚至从未去过标准::cou

  • 本文向大家介绍Python语言什么可以迭代,包括了Python语言什么可以迭代的使用技巧和注意事项,需要的朋友参考一下 示例 Iterable可以是任何一项只能逐一接收的项目。内置的Python集合是可迭代的: 生成器返回可迭代项:            

  • 问题内容: 假设我们有这个流 我想在地图中保存几对相邻的字符串,其中第一个以“ err”开头。 我想到的就是这样 但是我对它并不完全满意,主要有两个原因 我在“滥用” 功能。在Stream API中,每个函数都有其明确的定义明确的目的:应该计算最大值,应该根据条件进行过滤,应该产生递增的累加值,依此类推。 这样做会使我无法使用Streams强大的机制:如果我想将搜索范围限制在前两个结果中,该怎么办

  • 问题内容: 今天,我只是研究一些基本的快速概念,并通过一些示例来理解这些概念。现在,我已经完成了元组的学习。 我有一个疑问,即使用元组有什么需要?是的,我对此做了一些挖掘: 我们可以从一个函数返回多个值。好的,但是我们也可以通过返回一个数组来做到这一点。 数组可以,但是我们可以返回不同类型的多个值。好的,但是这也可以通过AnyObject数组来完成,如下所示: 我们可以命名元组中存在的对象。好的,