使用变量访问元组的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用变量访问元组的值相关的知识,希望对你有一定的参考价值。

如何根据动态值从元组中读取项?例如,如果我想在这里“香蕉”,我这样做:

var tuple = ("banana", "sock", "shoe")
print(tuple.0)

但是如何使用存储在另一个变量中的值?

var parameter = 0

print(tuple.parameter)
答案

元组不够灵活,无法做到这一点。你可以接近功能:

let tuple = ("banana", "sock", "shoe")

let first = { (t: (String, String, String)) -> String in t.0 }
let second = { (t: (String, String, String)) -> String in t.1 }
let third = { (t: (String, String, String)) -> String in t.2 }

let choice = first
print(first(tuple))

但这根本不可扩展;对于要与之交互的每个元组类型,您需要一组这样的函数。

一种选择可能是创建一个struct作为你的元组的替代品。然后你可以使用KeyPath。例如:

struct Items
{
    let first: String
    let second: String
    let third: String

    init(tuple: (String, String, String))
    {
        self.first = tuple.0
        self.second = tuple.1
        self.third = tuple.2
    }
}

let choice = Items.first

let items = Items(tuple: tuple)
print(items[keyPath: choice])

或者,如果你的元组像你的例子一样是同质的,另一种选择是转换为数组并使用数组下标:

extension Array where Element == String
{
    init(_ tuple: (String, String, String))
    {
        self.init([tuple.0, tuple.1, tuple.2])
    }
}

let array = Array(tuple)
let index = 0
print(array[index])

(类似下标的密钥路径也将在未来的Swift中出现,但在这种情况下,它们不会在常规下标之上购买任何东西。)

以上是关于使用变量访问元组的值的主要内容,如果未能解决你的问题,请参考以下文章

元组的详细操作

元组的基本操作

基本数据类型____元组

基本数据类型____元组

来自元组的 JavaScript 变量赋值

Python:用于元组的 Pandas DataFrame