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

为什么我们可以使用数组快速返回多个值时使用元组

公良光熙
2023-03-14
问题内容

今天,我只是研究一些基本的快速概念,并通过一些示例来理解这些概念。现在,我已经完成了元组的学习。

我有一个疑问,即使用元组有什么需要?是的,我对此做了一些挖掘:

我们可以从一个函数返回多个值。好的,但是我们也可以通过返回一个数组来做到这一点。

数组可以,但是我们可以返回不同类型的多个值。好的,但是这也可以通过AnyObject数组来完成,如下所示:

        func calculateStatistics (scores:[Int])->[AnyObject]
    {
        var min = scores[0]
        var max = scores[0]
        var sum = 0

        for score in scores
        {
            if score > max{
                max = score
            }
            else if score < min{
                min = score
            }
            sum += score
        }
        return [min,max,"Hello"]
    }

    let statistics = calculateStatistics([25,39,78,66,74,80])

    var min = statistics[0]
    var max = statistics[1]
    var msg = statistics[2] // Contains hello

我们可以命名元组中存在的对象。好的,但是我可以使用AnyObject的字典。

我并不是说为什么要使用元组。但是应该有一些只有元组才能够做的事情,或者只有元组才容易做到的事情。而且,如果没有充分的理由,那么创建swift的人就不会让tuple参与其中。因此,应该有一些充分的理由让他们参与其中。

所以,请让我知道在某些情况下元组是最好的选择。

提前致谢。


问题答案:

元组是可以以多种方式使用的匿名结构,其中之一是使从函数返回多个值变得更加容易。

使用元组而不是数组的优点是:

  • 可以在一个元组中存储多种类型,而在数组中,您只能使用一种类型(除非使用[AnyObject]
  • 固定数量的值:您不能传递比预期更少或更多的参数,而在数组中可以放置任意数量的参数
  • 强类型化:如果将不同类型的参数传递到错误的位置,则编译器将检测到该错误,而使用不会发生的数组
  • 重构:如果参数的数量或它们的类型发生变化,则编译器将产生相关的编译错误,而数组将被忽略
  • named:可以将名称与每个参数关联
  • 分配更容易,更灵活-例如,可以将返回值分配给元组:
    let tuple = functionReturningTuple()
    

或所有参数都可以自动提取并分配给变量

    let (param1, param2, param3) = functionReturningTuple()

有可能忽略一些值

    let (param1, _, _) = functionReturningTuple()
  • 与函数参数的相似性:调用函数时,您传递的参数实际上是一个元组。例:
        // SWIFT 2
    func doSomething(number: Int, text: String) {
        println("\(number): \(text)")
    }

    doSomething(1, "one")

    // SWIFT 3    
    func doSomething(number: Int, text: String) {
        print("\(number): \(text)")
    }

    doSomething(number: 1, text: "one")

(在Swift 2中已弃用)该函数还可以通过以下方式调用:

        let params = (1, "one")
    doSomething(params)

该列表可能并不详尽,但是我认为有足够的理由让您喜欢将元组添加到数组中以返回多个值



 类似资料:
  • 问题内容: 如何快速从函数返回3个相同类型(Int)的单独数据值? 我试图返回一天中的时间,我需要将小时,分钟和秒作为单独的整数返回,但是所有这些都来自同一个函数,这可能吗? 我想我只是不了解返回多个值的语法。这是我正在使用的代码,我在last(return)行上遇到了麻烦。 任何帮助将不胜感激! 问题答案: 返回一个元组: 然后将其调用为: 要么:

  • 通常,我们应该使用关键字来定义类的计算属性,如 但是,我们不能使用来定义一个存储的属性(我知道它来自OC)。 同时可以在类中使用来定义存储的属性并使其成功运行。 所以我的问题是:和在类中使用时有什么区别?

  • 当我要遍历a-z时,我可以使用: 但是里面的原理是什么?为什么我们可以计算char而不需要转移到int来计算?

  • 问题内容: 我很好奇如何快速进行元组的for循环。 我知道要访问每个成员,您可以使用带点号的索引号 //错误:类型不符合协议顺序 问题答案: 是的你可以! 瞧! 注意最后一个是不是一个元组这样什么也不会发生(尽管它是一个内容可以被访问1元组或“单” ,为0)。 有趣的是,它甚至可以迭代其他类型的集合。 并且该集合包括和! 注意:作为块的第二个参数传递的值是type 。您必须将其强制转换回原始类型的

  • 问题内容: 我是一个完整的初学者。 我已阅读了有关解决方案的Google文档。我在互联网上搜索了同样的内容。 但。一切似乎都是技术性的。 据我了解,.Flush有助于在功能出现时立即执行这些功能,而无需将它们捆绑在一起。 我对吗? 如果不是的话,外行人的含义是什么?并请举一个简单的例子。谢谢。 问题答案: 程序员在希望确保在继续之前将先前代码的输出和/或效果写入电子表格时会使用。如果您不这样做,则

  • 本文向大家介绍我们可以使用Java以多种方式将String转换为字符数组?,包括了我们可以使用Java以多种方式将String转换为字符数组?的使用技巧和注意事项,需要的朋友参考一下 您可以通过将String的每个元素复制到数组或使用方法将String转换为字符数组。 复制每个元素 获取要转换的字符串。 创建一个长度为String的空字符数组。 String类的charAt()方法返回特定位置的字