我的场景,我有两个具有相同计数的独立数组。我正在向我的选择器或桌子展示array_one
。我没有展示array_two
但array_one
我将在table or picker
视图中显示。当用户点击特定索引时,我可以获得array_one
值,但同时我还需要获得相关ID(array_two)。怎么做,请提供一些样品。
Var array_one = [“Hindi”,”English”,”Bengali”,”Telugu”,”Odia”]
Var array_two = [“05”,”02”,”08”,”02”,”09”]
上面,阵列我有language and ID
。我在选择器或tableview中列出语言,当我选择语言相关的索引ID时,我也需要。 Output like: “Hindi, 05"
试试这个:
let array_one = ["Hindi","English","Bengali","Telugu","Odia"]
let array_two = ["01","02","03","04","05"]
let language = "Hindi"
guard let index = array_one.index(of: language) else {
fatalError("Couldn't find the language")
}
let languageId = array_two[index]
let output = language + ", " + languageId
print(output) //"Hindi, 01"
实际上,不需要array_two
:
let array_one = ["Hindi","English","Bengali","Telugu","Odia"]
let language = "Hindi"
guard let index = array_one.index(of: language) else {
fatalError("Couldn't find the language")
}
let languageId = String(format: "%02d", index + 1)
let output = language + ", " + languageId
这是使用zip
的解决方案:
let array_one = ["Hindi","English","Bengali","Telugu","Odia"]
let array_two = ["01","02","03","04","05"]
let zipped = zip(array_one, array_two)
let language = "Hindi"
guard let index = array_one.index(of: language),
let languageAndId = zipped.first(where: {$0.0 == language
})
else {
fatalError("Couldn't find the language")
}
let output = languageAndId.0 + ", " + languageAndId.1
print(output) //prints "Hindi, 01"
要使用面向对象的编程方法,请使用结构:
let array_one = ["Hindi","English","Bengali","Telugu","Odia"]
let array_two = ["01","02","03","04","05"]
struct Language {
let name: String
let index: String
}
let languagesArray: [Language] = zip(array_one, array_two).map{Language(name: $0.0, index: $0.1)}
let language = "Hindi"
guard let languageAndId = languagesArray.first(where: {$0.name == language
}) else {
fatalError("Couldn't find the language")
}
let output = languageAndId.name + ", " + languageAndId.index
//prints "Hindi, 01"
您可以使用拉伸两个数组的计算属性:
var languages = { return zip(array_one, array_two).map{ "\($0.0), \($0.1)" } }
这将压缩2个数组,并将每对值映射到逗号分隔的字符串。由于它是计算的,因此将自动显示对原始数组的任何更改。所以现在你可以使用languages
作为数据源。
我有两个具有相同计数的独立数组。
试图保持两个或多个数组同步永远不是一个好主意 - 从一个数组中添加或删除某些东西并忘记更新其他数据太容易了,这使得这种方法成为严重错误的持续来源。
更好的方法是将所有相应的数据部分保存在某种数据结构中,并将这些结构存储在单个数组中。这消除了忘记更新所有阵列的可能性,因为只有一个需要担心。不同的语言以不同的方式支持这种方法;斯威夫特给了我们元组。您可以像这样定义数组:
var array = [("Hindi", "01"),
("English", "02"),
("Bengali", "03"),
("Telugu", "04),
("Odia", "05")]
现在,您可以在一个阵列中获得两组数据,并且可以单独访问这些部分:
let third_language = array[3].0
let third_id = array[3].1
但是如果你愿意,你也可以命名元组的各个部分:
var array : [(language:String, id:string)] = [("Hindi", "01"),
("English", "02"),
("Bengali", "03")]
let third = array[3]
print(third.language) // prints "Bengali"
print(third.id) // prints "03"