ios - swift 3 filter array of dictionaries by string value of key in dictionary -


i have class such this

class founditem : nsobject {  var id : string! var itemname : string! var itemid : int! var foundby : string! var timefound : string!  init(id: string,     itemname: string,     itemid: int,     foundby: string,     timefound: string)  {     self.id = id     self.itemname = itemname     self.itemid = itemid     self.foundby = foundby     self.timefound = timefound  } 

and reference on

class mapviewvc: uiviewcontroller, mkmapviewdelegate {  var found = [founditem]()  var filteritemname : string()  } 

my founditem generated array of dictionaries class of founditem firebase query. string of itemname generated view controller collection view on didselection function. want take string , filter or search arrays string itemname equal itemname string previous viewcontroller. removed array of dictionaries not equal itemname. not objects, entire array contains non-equal key, value pair. have looked days, , stuck on filtering array of dictionaries created class. have looked , tried nspredicates, for-in loops, ends happening creating new array or bool finds values or keys equal. here current function have written.

func filterarraybysearch() {      if self.filteritemname != nil {          dump(found)          let namepredicate = nspredicate(format: "itemname %@", "\(filteritemname)")         let namefilter = found.filter { namepredicate.evaluate(with: $0) }          var crossrefnames = [string: [founditem]]()         nameitemarr in found {             let listname = nameitem.itemname             let key = listname              if crossrefnames.index(forkey: key!) != nil {                  crossrefnames[key!]?.append(nameitemarr)                  if !("\(key)" == "\(filteritemname!)") {                      print("------------- success have found [[[[[[    \(key!)    ]]]]]] , \(filteritemname!) equal!!")                       // crossrefnames[key!]?.append(nameitemarr)                  } else {                      print("!! not find if \(key!) , \(filteritemname!) equal !!")                 }               } else {                  crossrefnames[key!] = [nameitemarr]             }         }      } else {          print("no data search/filtervc controller")     } } 

can help? seems simple task find value , filter out dictionaries not equal itemname string, keep hitting wall. , running for-in loops myself :p trying different things achieve same task.

i hope understood asking. mention "array of dictionaries" don't have array of dictionaries anywhere in code you've posted.

as far can tell, asking how find entries in found array itemname equals filteritemname property.

if so, should need is:

let founditems = found.filter { $0.itemname == filteritemname }

that's it.


some other ideas:

if want search items filteritemname contained in itemname, this:

let founditems = found.filter { $0.itemname.contains(filteritemname) }

you make use of lowercased() function if want case-insensitive search.

you return properties of found elements array:

let foundids = found.filter { $0.itemname == filteritemname }.map { $0.itemid }


Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -