2017-07-11 3 views
1

Bonjour les gars, j'ai un tableau de dictionnaire, pouvez-vous me dire comment puis-je filtrer ces données basées sur les clés du dictionnaire.Filtrer les données du tableau du dictionnaire en utilisant le SDK iOS

(
    { 
    "mall_id" = M0550; 
    "mall_name" = "Amrita Shopping Complex"; 
}, 
    { 
    "mall_id" = M0509; 
    "mall_name" = "Ashoka Market"; 
}, 
    { 
    "mall_id" = M0943; 
    "mall_name" = "Biju Pattnaik Commercial Complex"; 
}, 
    { 
    "mall_id" = M0457; 
    "mall_name" = "BMC Bhawani Mall"; 
}, 
    { 
    "mall_id" = M0460; 
    "mall_name" = "BMC Keshari Mall"; 
}, 
    { 
    "mall_id" = M0571; 
    "mall_name" = "BMC Market Complex"; 
}, 
    { 
    "mall_id" = M0453; 
    "mall_name" = "Forum Mart"; 
}, 
    { 
    "mall_id" = M0609; 
    "mall_name" = "Indradhanu Market"; 
}, 
    { 
    "mall_id" = M0558; 
    "mall_name" = "Kalyani Plaza Market Complex"; 
}, 
    { 
    "mall_id" = M0463; 
    "mall_name" = "Maa Barabhuja Mall"; 
}, 
    { 
    "mall_id" = M0553; 
    "mall_name" = "Mahaveer Complex"; 
}, 
    { 
    "mall_id" = M0570; 
    "mall_name" = "Market Building"; 
}, 
    { 
    "mall_id" = M0452; 
    "mall_name" = "Pal Heights Mall"; 
}, 
    { 
    "mall_id" = M0466; 
    "mall_name" = "Priyadarshini Market Complex"; 
}, 
    { 
    "mall_id" = M0677; 
    "mall_name" = "Ruchika Market"; 
}, 
    { 
    "mall_id" = M0504; 
    "mall_name" = "Shubham Market Complex"; 
}, 
    { 
    "mall_id" = M0564; 
    "mall_name" = "Subhadra Complex"; 
}, 
    { 
    "mall_id" = M0559; 
    "mall_name" = "Sultania Shopping Complex"; 
}, 
    { 
    "mall_id" = M0552; 
    "mall_name" = "Tathastu Complex"; 
}, 
    { 
    "mall_id" = M0568; 
    "mall_name" = "Western Tower Market Building"; 
} 
) 

ce que je veux réaliser, chaque fois que je tape quelque chose dans la barre de recherche, il vérifiera la clé mall_name et le retour des valeurs correspondant dans le tableau.

Merci et salutations

+0

duplication possible de [tableau de filtrage avec des dictionnaires en utilisant NSPredicate] (https://stackoverflow.com/questions/12084318/filter-array-with-dictionaries-using-nspredicate) –

+0

vous pouvez le vérifier à https://stackoverflow.com/questions/12084318/filter-array-with-dictionaries-using-nspredicate –

+0

J'ai essayé ce lien mais je ne travaillais pas pour moi. @SaurabhPrajapati – sanjeet

Répondre

8

Cela vous donnera votre sortie désirée

Objectif - C

NSArray *filteredData = [yourArrayContainingDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]]; 

Swift

let filteredData = yourArrayContainingDictionary.filter{ 
    let string = $0["mall_name"] as! String 

    return string.hasPrefix("searchText") 
} 

Hope this vous aide :)

+0

J'ai fait face à ce problème similaire, cette solution a fonctionné pour moi. Je vous remercie. –

0

cela vous donne un éventail de dictionnaires avec requiredMallID seulement

NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", requiredMallID]]; 

Par exemple,

NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", "M0550"]]; 

vous donne

(
     { 
     "mall_id" = M0550; 
     "mall_name" = "Amrita Shopping Complex"; 
    } 
) 
1
NSArray *filtered = [arrName filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name == %@)", requiredMailName]]; 
6

Essayez celui-ci . (Prédicats fonctionne comme des requêtes SQL)

Obj C

NSArray *filterArray = [sourceArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]]; 

Swift

var filterArray: [Any] = sourceArray.filter { NSPredicate(format: "(mall_name contains[c] %@)", searchText).evaluate(with: $0) } 

Il retourne les entrées dont le nom contient la chaîne de recherche.

1
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", wantedMallID]]; 
3

Utilisez pour vous la solution

NSArray *filtered = [yourArrayOfDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", <your search text from search bar>]]; 
1

Voici mes 2 versions en utilisant prédicat et un classique:

let dict = [ 
    [ 
     "mall_id": 1, 
     "mall_name": "Amrita Shopping Complex" 
    ], 
    [ 
     "mall_id": 2, 
     "mall_name": "Ashoka Market" 
    ] ] 

// Example using Predicate 

let mallNamePredicate = NSPredicate(format: "mall_name contains %@", "Ashoka") 
let filteredWithPredicate = (dict as NSArray).filtered(using: mallNamePredicate) 

// Classical filter example 
let filtered = dict.filter { pair in 
    guard let mallName = pair["mall_name"] as? String else { return false } 
    return mallName.hasPrefix("Ashoka") 
} 
1

Plus façon swifty de faire cela serait quelque chose comme

let mallArray = [ 
    [ 
     "mall_id": "M0550", 
     "mall_name": "Amrita Shopping Complex" 
    ], 
    [ 
     "mall_id": "M0509", 
     "mall_name": "Ashoka Market" 
    ] 
] 

func isMatching(_ searchText: String) -> [[String: Any]] { 
    let filteredArray = mallArray.filter { 
     return $0["mall_name"]!.contains(searchText) 
    } 
    return filteredArray 
} 

let malls = isMatching("Ashoka") 
print(malls)