objective c - Add objects to NSMutableArray from another NSMutableArray (iOS) -


i have nsmutablearray(arrayone) structured so..

({    "item_image_timestamp" = "492364855.234597";    "item_image_url" = "sample url";    "item_image_vote" = 123; }, {    "item_image_timestamp" = "492364458.236597";    "item_image_url" = "sample url";    "item_image_vote" = 456; }, {    "item_image_timestamp" = "492364179.052397";    "item_image_url" = "sample url";    "item_image_vote" = 6184; }, {    "item_image_timestamp" = "492364789.004447";    "item_image_url" = "sample url";    "item_image_vote" = 64; }, {    "item_image_timestamp" = "492364356.002341";    "item_image_url" = "sample url";    "item_image_vote" = 3778; }) 

the maximum number of objects can contained in arrayone 10.

then, have second nsmutablearray(arraytwo) structured arrayone

({    "item_image_timestamp" = "492364855.234597";    "item_image_url" = "sample url";    "item_image_vote" = 123; }, {    "item_image_timestamp" = "492364458.236597";    "item_image_url" = "sample url";    "item_image_vote" = 456; }) 

..except maximum number of objects can contained in arraytwo 3.

now, want is..

  • add objects of arraytwo arrayone (keeping in mind arrayone can hold maximum of 10 objects)
  • keep top 5 objects sorted key "item_image_vote" (top 5 voted object should not replaced)
  • if objects in arrayone need replaced, item lowest value key "item_image_timestamp" should replaced first.(oldest object replaced first..followed the second oldest).

i hope did not make question confusing. thank in advance.

adding, removing , measuring length methods on mutable arrays, straight-forward apply. interesting part of question sort criteria, addressed nssortdescriptor.

nsarray allows application of these in groups sortedarrayusingdescriptors (notice plural). approach add arrays, sort according criteria , truncate max length.

// sort on vote, descending nssortdescriptor *votedescriptor = [nssortdescriptor sortdescriptorwithkey:@"item_image_vote" ascending:no];  // sort on date, descending nssortdescriptor *datedescriptor = [nssortdescriptor sortdescriptorwithkey:@"item_image_timestamp" ascending:no];  nsmutablearray *bigarray = [arrayone mutablecopy];  // note: lowercase variable names considered preferable style [bigarray addobjectsfromarray:arraytwo];  [bigarray sortusingdescriptors:@[votedescriptor, datedescriptor]]; // note: order matters. want votes sorted first, ties broken date 

the result bigarray, sorted, truncated max size.

nsarray *result = [bigarray subarraywithrange:nsmakerange(0, min(10, bigarray.count))]; 

Comments