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

问题描述 投票:1回答:3

我的场景,我有两个具有相同计数的独立数组。我正在向我的选择器或桌子展示array_one。我没有展示array_twoarray_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"

ios arrays swift
3个回答
1
投票

试试这个:

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"

1
投票

您可以使用拉伸两个数组的计算属性:

var languages = { return zip(array_one, array_two).map{ "\($0.0), \($0.1)" } }

这将压缩2个数组,并将每对值映射到逗号分隔的字符串。由于它是计算的,因此将自动显示对原始数组的任何更改。所以现在你可以使用languages作为数据源。


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"
© www.soinside.com 2019 - 2024. All rights reserved.