Swift 4中如何提取特定数组?如何通过键获取数组元素值?
如何从quizsArray中通过“键”获取元素值
嘿,看起来你是想从自己构建的quizsArray里,通过类似“键”的方式获取Question对象的属性或者对应的元素对吧?我给你几个实用的方案,适配不同的场景:
1. 按数组索引直接获取元素并访问属性
如果已经知道目标元素在数组中的位置,直接通过索引取出对象,再访问它的属性即可:
// 获取数组第一个元素的questionText let targetQuestionText = quizsArray[0].questionText // 获取该元素的正确选项索引 let targetCorrectAnsIndex = quizsArray[0].correctAns // 甚至可以直接拿到正确选项的文本 if targetCorrectAnsIndex < quizsArray[0].options.count { let correctOptionText = quizsArray[0].options[targetCorrectAnsIndex] print("正确选项:\(correctOptionText)") }
2. 通过属性值作为“键”查找对应的Question对象
如果你不知道元素的索引,但知道某个属性的值(比如questionText是“青”),可以用first(where:)方法匹配查找:
// 根据questionText匹配查找 if let targetQuestion = quizsArray.first(where: { $0.questionText == "青" }) { // 找到后可以访问任意属性 print("问题文本:\(targetQuestion.questionText)") print("所有选项:\(targetQuestion.options)") print("正确选项索引:\(targetQuestion.correctAns)") } else { print("没有找到匹配的问题") }
3. 转换为字典,用属性作为键快速取值
如果需要频繁通过某个属性(比如questionText)查找元素,建议先把数组转换成字典,这样后续的查找会更高效:
// 将数组转为字典,key是questionText,value是对应的Question对象 let quizDictionary = Dictionary(quizsArray.map { ($0.questionText, $0) }, uniquingKeysWith: { _, last in last }) // 直接通过键获取对应的Question对象 if let hotQuestion = quizDictionary["暑"] { print("问题「暑」的正确选项是:\(hotQuestion.options[hotQuestion.correctAns])") }
注意:如果你的
questionText存在重复值,上面的代码会自动保留最后一个匹配的元素;要是想自定义重复键的处理逻辑,可以调整uniquingKeysWith的闭包内容。
内容的提问来源于stack exchange,提问作者Kawazoe Kazuke
相关产品推荐
相关产品推荐

