Сравните ключ с массивом словарей в iOS swift 4 - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь сравнить studentId с массивом словарей, который имеет несколько студентов. Мне нужно получить словарь, который соответствует конкретному StudentID. Может ли кто-нибудь предложить идеальное решение. Я новичок в Свифте.

"students" : [
    {
      "studentId" : "STUDENT123456789",
      "middleName" : "Evangeline",
      "firstName" : "Dia",
      "rollNo" : "1001",
      "studentClass" : {
        "className" : "Grade 10",
        "classId" : "CLASS123456789",
      }
    }
  {
      "studentId" : "STUDENT14354678960",
      "middleName" : "Joseph",
      "firstName" : "Parker",
      "rollNo" : "1002",
      "studentClass" : {
        "className" : "Grade 10",
        "classId" : "CLASS15468975467",
      }
    }
  ]

У меня есть массив студентов, который является массивом словарей. Теперь я должен сравнить идентификатор студента с этим существующим массивом, содержащим несколько идентификаторов студентов. поэтому, когда он совпадает с идентификатором студента, мне нужно получить конкретные данные словаря. Например, у меня есть studentId как "STUDENT14354678960", поэтому мне нужно получить данные, связанные с этим идентификатором.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете использовать где с закрытием:

let search = students.first { (element) -> Bool in
    if let dict = element as? [String:Any] {
        return dict["studentId"] == yourID
    }
}
0 голосов
/ 07 мая 2018

Использовать first, возвращает первый найденный объект или nil

if let student = students.first(where: {$0["studentId"] as! String == "STUDENT123456789"}) {
   print(student["firstName"])
} else {
   print("not found")
}

Настоятельно рекомендуется использовать пользовательскую структуру или класс для данных студента, например

let jsonString = """
{"students" : [
{"studentId" : "STUDENT123456789", "middleName" : "Evangeline", "firstName" : "Dia", "rollNo" : "1001", "studentClass" : { "className" : "Grade 10", "classId" : "CLASS123456789"}},
{"studentId" : "STUDENT14354678960", "middleName" : "Joseph", "firstName" : "Parker", "rollNo" : "1002", "studentClass" : {"className" : "Grade 10", "classId" : "CLASS15468975467"}}
]}
"""

struct Root : Decodable {
    let students : [Student]
}

struct Student : Decodable {
    let studentId, middleName, firstName, rollNo : String
    let studentClass : StudentClass
}

struct  StudentClass : Decodable {
    let className, classId : String
}

let data = Data(jsonString.utf8)
do {
    let result = try JSONDecoder().decode(Root.self, from: data)
    let students = result.students
    if let student = students.first(where: {$0.studentId == "STUDENT123456789" }) {
        print(student)
    }
} catch {
    print(error)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...