Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用另一个数组引用获取值的Swift数组_Ios_Arrays_Swift - Fatal编程技术网

Ios 使用另一个数组引用获取值的Swift数组

Ios 使用另一个数组引用获取值的Swift数组,ios,arrays,swift,Ios,Arrays,Swift,在我的场景中,我有两个具有相同计数的独立数组。我正在将一个数组显示到我的选择器或表中。我不会显示数组\ 2,但会在表或选择器视图中显示数组\ 1。当用户单击特定索引时,我可以得到数组的一个值,但同时我还需要得到相关的IDarray二。如何做到这一点,请提供一些样品 Var array_one = [“Hindi”,”English”,”Bengali”,”Telugu”,”Odia”] Var array_two = [“05”,”02”,”08”,”02”,”09”] 上面,数组

在我的场景中,我有两个具有相同计数的独立数组。我正在将一个数组显示到我的选择器或表中。我不会显示数组\ 2,但会在表或选择器视图中显示数组\ 1。当用户单击特定索引时,我可以得到数组的一个值,但同时我还需要得到相关的IDarray二。如何做到这一点,请提供一些样品

   Var array_one = [“Hindi”,”English”,”Bengali”,”Telugu”,”Odia”]
   Var array_two = [“05”,”02”,”08”,”02”,”09”]
上面,数组我有语言和ID。当我选择语言相关的索引ID时,我在picker或tableview中列出了语言,我也需要获取。输出类似:“印地语,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"
实际上,不需要数组_2:

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"]

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个数组,并将每对值映射到一个逗号分隔的字符串。由于它是经过计算的,因此对原始数组的任何更改都将自动显示。因此,现在您可以使用语言作为数据源

我有两个计数相同的独立数组

尝试保持两个或多个阵列的同步从来都不是一个好主意-从一个阵列中添加或删除某些内容太容易,而忘记更新其他阵列,这使得这种方法成为严重错误的持续来源

更好的方法是将所有对应的数据块保存在某种数据结构中,并将这些结构存储在单个数组中。这样就避免了忘记更新所有数组的可能性,因为只需要担心一个数组。不同的语言以不同的方式支持此方法;Swift为我们提供了元组。您可以这样定义数组:

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"

你现在是如何获得数组值的?你也可以将它们组合为一个结构数组,在这个数组中,你的结构将拥有这两个值。我是从JSON获得的。我不擅长结构,所以我只在数组上附加JSON值@Rakesha ShastriUse,因为这些值是同步的:让数组=[[id:01,语言:印地语],[id:02,语言:英语]…],然后在您的选择器中,在您执行数组_one[row]的位置,执行数组_one[row][id]。如果你不擅长结构,你需要认真阅读。我建议你学习Swift的基础知识,学习如何使用基本数据结构来简化你的生活。当然,我会感谢dude。哇。太好了,我会在这里告诉你的。谢谢亲爱的@Carpsen90@macoapp你能再解释一下这个问题吗?我不懂明白你想用文本字段做什么来吧,用zip@macoapp我很高兴能帮上忙!很好的帮助@Carpsen90great..这是新的,我也会尝试一下。非常感谢@meggarCould@meggarGreat。请再多描述一点。@meggarGreat。顺便说一句,如何合并两个数组,因为我从JSON获取值并加载两个单独的数组。因此需要根据您的要求进行合并想法并希望在表中显示语言,但当我选择打印id为的语言时。@Caleb
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"