Swift数组与另一个数组引用以获取值

时间:2018-09-17 18:17:19

标签: ios arrays swift

我的情况是,我有两个具有相同计数的独立阵列。我正在将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"

3 个答案:

答案 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"