gpt4 book ai didi

swift - 为什么有些表达式记录结果而其他表达式只显示迭代计数?

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:14 24 4
gpt4 key购买 nike

我在 Swift 中并没有经常使用 playgrounds。大多数情况下,我一直在项目中使用它,所以我在处理 playgrounds 时有点不知所措。

我在一个小 Playground 上得到了这个测试代码:

let array = [7, 3, 4, 9, 2, 12, 5]
let firstSorted = array.sorted(<)
let secondSorted = sorted(array, <)
let thirdSorted = array.sorted { $0 < $1 }

右侧显示的输出显示了 firstSorted 和 secondSorted 旁边的排序数组输出。然而,thirdSorted 旁边的输出只是说(15 次)。

为什么?以及如何在不添加单独的 println 命令来记录输出的情况下查看输出?

第三种形式有一个尾随闭包,其参数由它们的位置指定。

另外两个是更短的形式,只采用比较运算符,恰好与所需闭包的签名相匹配。

另一个问题:(这次是关于语言,而不是 Playground )为什么sorted(array, <)array.sorted(<)表格有用吗?第一种是带有两个参数的全局函数,第二种形式是 Array 类上的方法。

最佳答案

这是因为您要传递给 sorted 的闭包由 sorted 调用在对数组进行排序时进行 13 次元素比较,以及对 sorted 的调用本身。每当您编写的一行代码在 playground 中运行时,它都会显示表达式的结果或计数。因为同一行被计算了多次,所以 IDE 不能显示所有内容,所以它只显示计数。

如果将其分成多行,您可以看到 sorted 的结果,以及 $0 < $1 的 13 项评估结果:

Image showing 13 executions plus result

我想 IDE 可能会采用最外层结果最有趣的方法,并显示该结果,但这可能会隐藏您的闭包被多次调用的信息。

关于第二个问题:sorted 的全局双参数版本比较笼统。它对任何类型的序列进行排序:

// they should probably rename this placeholder to S...
func sorted<C : SequenceType>
(source: C, isOrderedBefore: (C.Generator.Element, C.Generator.Element) -> Bool)
-> [C.Generator.Element]

因此您可以传入任何符合 SequenceType 的内容:

// results in [4,3,2,1,0]
sorted(0..<5, >)

// results in [(3,"bob"),(2,"fred")] because dictionary’s
// SequenceType representation is unordered pairs
sorted([2:"fred",3:"bob"]) { $0.1 < $1.1 }

此外,由于全局函数可以根据受限输入进行重载,因此如果输入序列的元素为 Comparable,则可以有一个根本不需要比较器的重载版本。 :

func sorted<C : SequenceType where C.Generator.Element : Comparable>
(source: C) -> [C.Generator.Element]

关于swift - 为什么有些表达式记录结果而其他表达式只显示迭代计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com