我的情况是,我有两个具有相同计数的独立阵列。我正在将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
。我在选择语言相关索引ID时也需要在选择器或表视图中列出语言。 Output like: “Hindi, 05"
答案 0 :(得分:1)
尝试一下:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
实际上,不需要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"
答案 1 :(得分:1)
您可以使用压缩两个数组的计算属性:
var languages = { return zip(array_one, array_two).map{ "\($0.0), \($0.1)" } }
这将压缩2个数组,并将每对值映射到一个逗号分隔的字符串。由于它是经过计算的,因此对原始数组的任何更改将自动显示。因此,现在您可以将languages
用作数据源。
答案 2 :(得分:0)
我有两个具有相同计数的独立数组。
尝试使两个或多个数组保持同步绝不是一个好主意-从一个数组中添加或删除某些内容而忘记更新其他数组太容易了,这使这种方法成为严重错误的持续来源
一种更好的方法是将所有相应的数据片段保存在某种数据结构中,并将这些结构存储在单个数组中。这消除了忘记更新所有阵列的可能性,因为只有一个需要担心。不同的语言以不同的方式支持这种方法。雨燕给我们元组。您可以这样定义数组:
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"