2016-11-02 4 views
-2

Я пытаюсь сортировать массив словарей в соответствии с ключом, который имеет дату. Таким образом, сортировка фактически должна выполняться на основе дат. Но я не знаю, почему sortedArrayUsingComparator не сортирует массив, и я возвращаю старый массив. Все значения идут правильно в объектах (obj1, obj2).Как отсортировать массив словарей по времени в swift

Вот набор фильтров:

(
     { 
     age = 26; 
     "already_reported" = no; 
     "already_sync" = no; 
     "complete_name" = "Ghazalahhhhhhhhhhhhh Khan"; 
     distance = "7.92353"; 
     "first_name" = Ghazalahhhhhhhhhhhhh; 
     id = 288; 
     "last_chat_details" =   (
         { 
       "from_xmpp_id" = ghazalah41e21475158541; 
       id = 9614; 
       message = H; 
       "message_est_timing" = "2016-11-02 08:30:09"; 
       timestamp = 1478075409813132; 
       "to_xmpp_id" = annungdg1475217973; 
       "xmpp_message_id" = "F67A8495-E700-485B-A0B3-49C854E4FA45"; 
      } 
     ); 
     "last_name" = Khan; 
     "last_played_music" =   (
         { 
       album = "Haan Kargi (Jatt.fm)"; 
       artist = "Ammy Virk (Mr-Jatt.com)"; 
       bpm = 0; 
       "created_at" = "0000-00-00 00:00:00"; 
       duration = "3.55"; 
       genre = "Single Tracks (Mr-Jatt.com)"; 
       id = 69251; 
       "is_recently_played" = 1; 
       "persistent_id" = 7705218523513871878; 
       title = "Haan Kargi (Mr-Jatt.com)"; 
       "updated_at" = "0000-00-00 00:00:00"; 
       "user_id" = 288; 
      } 
     ); 
     "matched_profile_image" =   (
         { 
       "est_date_time" = "2016-10-04 04:08:34"; 
       id = 479; 
       "image_order" = 3; 
       "is_profile_image" = no; 
       "main_image_id" = 2225; 
       "main_image_path" = "/files/profile_images/934820161004080721.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_934820161004080721.jpg"; 
       "user_id" = 288; 
      }, 
         { 
       "est_date_time" = "2016-10-04 04:08:34"; 
       id = 480; 
       "image_order" = 2; 
       "is_profile_image" = no; 
       "main_image_id" = 2226; 
       "main_image_path" = "/files/profile_images/685220161004080800.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_685220161004080800.jpg"; 
       "user_id" = 288; 
      }, 
         { 
       "est_date_time" = "2016-10-28 06:08:37"; 
       id = 552; 
       "image_order" = 1; 
       "is_profile_image" = yes; 
       "main_image_id" = 2313; 
       "main_image_path" = "/files/profile_images/825720161028100832.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_825720161028100832.jpg"; 
       "user_id" = 288; 
      } 
     ); 
     "short_description" = Church; 
     username = ghazalah41e21475158541; 
    }, 
     { 
     age = 26; 
     "already_reported" = no; 
     "already_sync" = no; 
     "complete_name" = "Michael Berrin"; 
     distance = "7.92490"; 
     "first_name" = Michael; 
     id = 310; 
     "last_chat_details" =   (
         { 
       "from_xmpp_id" = michaelgbmh1477565051; 
       id = 9143; 
       message = Hi; 
       "message_est_timing" = "2016-11-01 07:43:46"; 
       timestamp = 1477986226750744; 
       "to_xmpp_id" = annungdg1475217973; 
       "xmpp_message_id" = "CD8FD64D-1370-41AD-8731-BC2A4C16EB6D"; 
      } 
     ); 
     "last_name" = Berrin; 
     "last_played_music" =   (
         { 
       album = "T-Series"; 
       artist = ""; 
       bpm = 0; 
       "created_at" = "0000-00-00 00:00:00"; 
       duration = "5.04"; 
       genre = ""; 
       id = 72284; 
       "is_recently_played" = 1; 
       "persistent_id" = 4446247237416765338; 
       title = "Dheere Dheere Se Meri Zindagi Video Song (OFFICIAL) Hrithik Roshan, Sonam Kapoor | Yo Yo Honey Singh - YouTube"; 
       "updated_at" = "0000-00-00 00:00:00"; 
       "user_id" = 310; 
      } 
     ); 
     "matched_profile_image" =   (
         { 
       "est_date_time" = "2016-10-27 07:04:10"; 
       id = 543; 
       "image_order" = 4; 
       "is_profile_image" = no; 
       "main_image_id" = 2303; 
       "main_image_path" = "/files/profile_images/186120161027110402.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_186120161027110402.jpg"; 
       "user_id" = 310; 
      }, 
         { 
       "est_date_time" = "2016-10-27 07:12:52"; 
       id = 544; 
       "image_order" = 3; 
       "is_profile_image" = no; 
       "main_image_id" = 2304; 
       "main_image_path" = "/files/profile_images/132120161027111225.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_132120161027111225.jpg"; 
       "user_id" = 310; 
      }, 
         { 
       "est_date_time" = "2016-10-27 07:12:52"; 
       id = 545; 
       "image_order" = 1; 
       "is_profile_image" = yes; 
       "main_image_id" = 2305; 
       "main_image_path" = "/files/profile_images/270620161027111236.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_270620161027111236.jpg"; 
       "user_id" = 310; 
      }, 
         { 
       "est_date_time" = "2016-10-27 07:12:52"; 
       id = 546; 
       "image_order" = 2; 
       "is_profile_image" = no; 
       "main_image_id" = 2306; 
       "main_image_path" = "/files/profile_images/920120161027111247.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_920120161027111247.jpg"; 
       "user_id" = 310; 
      } 
     ); 
     "short_description" = ""; 
     username = michaelgbmh1477565051; 
    }, 
     { 
     age = 22; 
     "already_reported" = no; 
     "already_sync" = no; 
     "complete_name" = "Lisa Benson"; 
     distance = "7.92195"; 
     "first_name" = Lisa; 
     id = 287; 
     "last_chat_details" =   { 
     }; 
     "last_name" = Benson; 
     "last_played_music" =   (
         { 
       album = ""; 
       artist = ""; 
       bpm = 125; 
       "created_at" = "0000-00-00 00:00:00"; 
       duration = "3.1"; 
       genre = ""; 
       id = 76890; 
       "is_recently_played" = 1; 
       "persistent_id" = 577117298; 
       title = "Avicii -"; 
       "updated_at" = "0000-00-00 00:00:00"; 
       "user_id" = 287; 
      } 
     ); 
     "matched_profile_image" =   (
         { 
       "est_date_time" = "2016-09-29 08:54:10"; 
       id = 459; 
       "image_order" = 2; 
       "is_profile_image" = no; 
       "main_image_id" = 2200; 
       "main_image_path" = "/files/profile_images/858820160929125409.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_858820160929125409.jpg"; 
       "user_id" = 287; 
      }, 
         { 
       "est_date_time" = "2016-10-04 06:58:35"; 
       id = 481; 
       "image_order" = 1; 
       "is_profile_image" = no; 
       "main_image_id" = 2227; 
       "main_image_path" = "/files/profile_images/292820161004105734.jpg"; 
       "thumb_image_path" = "/files/profile_images/t_292820161004105734.jpg"; 
       "user_id" = 287; 
      } 
     ); 
     "short_description" = ""; 
     username = lisavmds1475153650; 
    } 
) 

Вот мой код, пожалуйста, помогите:

let tempArr: NSArray! = self.filteredArray.sortedArrayUsingComparator({ 
      (obj1:AnyObject!, obj2:AnyObject!) -> NSComparisonResult in 
      let dateStr1 = (obj1["last_chat_details"] as! NSArray).firstObject!["message_est_timing"] as! String 
      let date1: NSDate = dateFormatter.dateFromString(dateStr1 as String)! 
      let dateStr2 = (obj2["last_chat_details"] as! NSArray).firstObject!["message_est_timing"] as! NSString 
      let date2: NSDate = dateFormatter.dateFromString(dateStr2 as String)! 

      return date2.compare(date1) 

     } 
    ) 

    print("the temp msgs are\(tempArr)") 
enter code here 
+0

Вы можете показать результат? – vaibhav

+4

Почему 'NSArray' ?? Swift может сортировать собственный массив в одной строке. – vadian

+0

Обратите внимание, что 'date2.compare (date1)' будет делать нисходящую сортировку – alexburtnik

ответ

0

Является ли это то, что вы хотите?

let array = [ 
    ["message_est_timing" : Date(timeIntervalSince1970: 100)] , 
    ["message_est_timing" : Date(timeIntervalSince1970: 300)] , 
    ["message_est_timing" : Date(timeIntervalSince1970: 400)] 
] 
let newArr = array.sorted { (dict1, dict2) -> Bool in 
    let date1 = dict1["message_est_timing"]! 
    let date2 = dict2["message_est_timing"]! 
    return date1.compare(date2).rawValue == 1 ? true : false 
} 

новыйArr будет корректно отсортирован по дате.

+0

Там также есть 'last_chat_details' – marosoaie

Смежные вопросы