2016-12-23 2 views
0

Я хочу фильтровать массив, содержащий массив строк.Swift Filter array, содержащий массив строк

Мой код:

if(!(searchString?.isEmpty)!) { 
    shouldShowSearchResults = true 

    // Filter the data array and get only those countries that match the search text. 
    filteredPlazaDictionary = plazaDictionary.filter({ (match) -> Bool in 
     let matchText: NSString = match[1] as NSString 
     return (matchText.range(of: searchString!, options: NSString.CompareOptions.caseInsensitive).location) != NSNotFound 
    }) 
} 

Здесь filteredPlazaDictionary[[String]] и plazaDictionary[[String]], и я хочу, чтобы соответствовать каждый массив [1] внутри plazaDictionary с SearchString. Помоги пожалуйста.

+0

Что '(! (SearchString? .isEmpty!))' Делать ? Это кажется слишком сложным. – Fogmeister

+0

проверяет, является ли это empy –

+1

Итак, что же происходит с вашим кодом? Что происходит, что вы считаете неправильным? – Fogmeister

ответ

3

Я бы написал это что-то вроде этого, я думаю, что ...

// make it a function that takes everything it needs and returns a result array 
func filteredCountryArray(countryArray: [[String]], searchString: String) -> [[String]] { 
    guard !searchString.isEmpty else { 
     // search string is blank so return entire array... 
     return countryArray 
    } 

    // Filter the data array and get only those countries that match the search text. 
    return countryArray.filter { match in 
     // check array is long enough to get [1] out of it 
     guard match.count >= 2 else { 
      return false 
     } 

     let matchText = match[1] 
     return matchText.range(of: searchString, options: .caseInsensitive) != nil 
    } 
} 

plazaDictionary очень странное имя, чтобы дать массив. Это массив, а не словарь.

Что вы должны здесь сделать, это создать некоторые объекты данных (структуры, классы, перечисления и т. Д.), Которые хранят данные в лучшем формате, чем вложенный массив.

Это должно сделать то, что вы хотите на данный момент.

EDIT

Имея другой думать об этом, я бы также изменить serachString и массив входных параметров в ...

+0

Что-то странное происходит. Я использовал ваш код: 'filterPlazaDictionary = self.filteredCountryArray (countryArray: plazaDictionary, searchString: searchString!) self.tollBothPlazaTableView.reloadData()' Я вызываю вашу функцию как это, но когда searchString не пуст 'cellForRowAt indexPath' doesn ' t получить вызов. Короче tableView не перезагружается. –

+0

Ячейка для строки - это абсолютно несвязанная функция. Правильно ли фильтруется фильтр? – Fogmeister

+0

Да, но если TableView не перезагружается, то это не помогает. –