ios numerico Come verificare gli stessi valori per le chiavi multiple nella matrice di JSON Object?



tel input html (1)

Sto lavorando al calendario usando Swift3 . So che è possibile impostare gli stessi valori per chiavi diverse.

Ho questo NSArray chiamato Dictionary of JSON objects:

if parsedData["status"] as! Int == 200 {

    if let Streams = parsedData["data"] as! [AnyObject]? {
       for Stream in Streams {
           print(Stream) 
       }



Stream result: {
"-" = 4;
1 = X;
10 = H;
11 = X;
12 = X;
13 = X;
14 = X;
15 = X;
16 = X;
17 = H;
18 = X;
19 = X;
2 = X;
20 = X;
21 = X;
22 = X;
23 = L;
24 = H;
25 = X;
26 = L;
27 = "-";
28 = "-";
29 = "-";
3 = H;
30 = "-";
4 = X;
5 = X;
6 = X;
7 = X;
8 = X;
9 = X;
H = 4;
L = 2;
X = 20;
blank = "";
classid = id;
classname = " (A)";
stdid = 1;
stdnm = "name"; }

Qui da 1 a 31 sono giorni di costanti dipendenti dal mese. XHL sono foglie, foglie normali e normali. Devo controllare x, h, l valori e ottenere le date.

Tuttavia, non conosco esattamente la logica per verificare se i valori sono gli stessi, quindi aggiungere il suo valore alla stessa chiave.

Mi aiuti per favore. Ringraziandovi


Si prega di controllare :

Questo è per il tuo formato JSON

if let streams = parsedData["data"] as! [AnyObject]? {
    for stream in streams {
        let dict = stream as? [AnyHashable: Any]
        print(getValue(key: "H", dict: dict!))
        print(getValue(key: "L", dict: dict!))
        print(getValue(key: "X", dict: dict!))
    }
}

func getValue(key: String, dict: [AnyHashable: Any]) -> [Int] {
    return dict.filter { $0.value as? String == key }.flatMap { Int(String(describing: $0.key)) }
}

Di seguito è riportato per i dizionari

let dict = ["-": 4, 1: "X", 10: "H", 11: "X", 12: "X", 13: "X", 14: "X",
           15: "X", 16: "X", 17: "H", 18: "X", 19: "X", 2: "X", 20: "X",
           21: "X", 22: "X", 23: "L", 24: "H", 25: "X", 26: "L", 27: "-",
           28: "-", 29: "-", 3: "H", 30: "-", 4: "X", 5: "X", 6: "X", 7: "X",
           8: "X", 9: "X", "H": 4, "L": 2, "X": 20] as [AnyHashable : Any]

Opzione 1 Passa la chiave e restituirà la matrice delle date

    print(getValue(key: "H", dict: dict)) //[17, 10, 24, 3]
    print(getValue(key: "L", dict: dict)) //[26, 23]
    print(getValue(key: "X", dict: dict)) //[12, 25, 14, 20, 5, 15, 7, 11, 13, 16, 19, 22, 21, 9, 18, 2, 6, 4, 1, 8]

    func getValue(key: String, dict: [AnyHashable: Any]) -> [Int] {
        return dict.filter { $0.value as? String == key }.flatMap { $0.key as? Int}
    }

Opzione 2 Passa più chiavi e restituirà il dizionario con l'array di date associato a ciascun tasto

    print(getValue2(keys: ["H","L","X"], dict: dict))
    //["H": [17, 24, 3, 10], "L": [23, 26], "X": [14, 20, 13, 19, 21, 9, 6, 1, 12, 25, 5, 15, 7, 11, 16, 22, 18, 2, 4, 8]]

    func getValue2(keys: [String], dict: [AnyHashable: Any]) -> [String: [Int]] {
        var returnValue = [String: [Int]]()
        for key in keys {
            returnValue[key] = [Int]()
        }

        dict.forEach {
            if let v = $0.value as? String, returnValue[v] != nil, let k = $0.key as? Int {
                returnValue[v]!.append(k)
            }
        }
        return returnValue
    }




calendar