2016-02-24 27 views
3

我在輸入搜索欄時嘗試過,其結果應該是表視圖中的更新,因爲我在輸入時動態過濾數據。如何使用Swift-2過濾大型陣列以獲得高性能

當我在模擬器中測試時,它運行良好,但實際上運行在iPhone上,而鍵入它會給出非常緩慢的響應。

我知道,由於大數組,即100000條記錄的陣列,由於這可能會給我緩慢的響應。

這是我實際的過濾東西,當用戶開始輸入時會過濾數據。

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) 
      { 
        self.filtered = self.data.filter({ (text) -> Bool in 

         let tmp: NSString = text 
         let range = tmp.rangeOfString(searchText, options: [NSStringCompareOptions.CaseInsensitiveSearch , NSStringCompareOptions.AnchoredSearch]) 
        return range.location != NSNotFound 

       }) 


       if(self.filtered.count == 0) 
       { 
        self.searchActive = false; 
       } 
       else 
       { 
        self.searchActive = true; 
        self.tableView.reloadData() 
       } 
       if(searchBar.text == "") 
       { 
        searchBar.resignFirstResponder() 
       } 
       self.tableView.reloadData() 

       searchBar.showsCancelButton = true 
       self.ContainerView.hidden=true 
       self.tableView.hidden=false 
       if(searchBar.text != "") 
       { 
        self.ContainerView.hidden=true 
        self.tableView.hidden=false 
       } 
     } 

我該如何實現它,以這樣一種方式,它應該快速過濾並提供快速響應?

我是否應該用「多線程」來實現它&怎麼樣?

即使我嘗試使用下面的方法這個東西......

dispatch_to_background_queue {} & FUNC dispatch_to_main_queue(塊:dispatch_block_t){(!dispatch_get_main_queue(),塊) dispatch_async }

請爲此建議我適當的解決方案。

+0

任何解決方案?.. –

回答

0
  1. 先前排序或過濾的約束數組使生活變得非常簡單。

  2. 獲取的數據可以按日期的附加,它可以減少數據的數量進行過濾

而且我相信這個選項只幫助或暗示其並不一定需要是嚴格限制,以上可以慢慢改善你的功能。

嘗試使用NSPredicate,更好地改變我的改進過程。

+0

這是我嘗試根據用戶輸入過濾的排序數組。有沒有什麼不同的方式來實現它。 –

+0

嘗試使用nspridicate並使用日期進行過濾(stackOverflow中有太多源代碼),它可能必須使用更多參數設計類,如果在過濾器中沒有找到數據,可以一個接一個地使用該參數,如果您只查找過濾器在字符串中嘗試字典搜索在GeekforGeeks中查找它 – mkumar

+1

是否可以使用多線程來增強其過濾性能。 –