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
Post a Comment