2017-10-31 1 views
0

안녕하세요 여러 값을 가진 배열이있어서 검색 막대의 인덱스를 필터링하려고합니다. 영어 용어의 예는 다음과 같습니다. 이름 "Name2"에 대한 색인을 제공하고 각 색인의 첫 번째 값에있는 모든 문자열을 검사하여이 작업을 수행하십시오.배열의 배열을 필터링하는 방법

코드 :

// Multiple Errors 

var receivedList = [["Name1","Apple","Fresh"],["Name2","Orange","Rotten"],["Name3","Pear","Fresh"],["Name4","Grape","Rotten"]] 


filteredData = data.filter({$0 == searchBar.text}) 
filteredData = receivedList.filter({$0 receivedList[1] == searchBar.Text}) 


//Im not really sure how to use this or if it's even useful 

let searchPredicate = NSPredicate(format: "Orange CONTAINS[C] %@", searchText) 

let array = (receivedList as NSArray).filtered(using: searchPredicate) 

이 Iv'e 여기에이 페이지를 확인. 행운과

filtering-array-of-dictionaries-in-swift

swift-filter-dictionary

filter-array-of-objects-with-multiple-criteria-and-types-in-swift

그리고-몇 다른 사람, 내가 제대로 질문을 읽는다면, 당신은의 인덱스를 찾으려면

+0

코드에 사전이 없습니다. 배열 배열 배열 –

+0

오타를 주셔서 감사합니다. @Leo Dabus – Hunter

+0

코드의 출력을 어떻게 하시겠습니까? 귀하의 질문에 "필터"라고 표시되지만 색인을 찾고 싶다고 말하는 것입니다. – 4castle

답변

2

첫 번째 요소는 검색 패턴과 일치합니다. 다음,

let matches = receivedList.filter { $0[0].contains(searchText) } 

당신이 일치하는 인덱스를 원하는 경우에 당신이 할 수

var receivedList = [["Name1","Apple","Fresh"],["Name2","Orange","Rotten"],["Name3","Pear","Fresh"],["Name4","Grape","Rotten"]] 
var searchText = "Name2" 

let index = receivedList.index { $0[0] == searchText } 

print(index) 

이 다음은 그 첫 번째 요소 검색 텍스트가 포함 만에 목록을 필터링합니다 : 다음은 그렇게하는 방법을 보여줍니다 사용 :

let matches = receivedList 
    .enumerated() 
    .filter { $0.1[0].contains(searchText) } 
    .map { $0.0 } 
+0

배열을 반복적으로 반복하는 것을 피하기 위해'flatMap'을 사용할 수있다. 'receivedList.enumerated(). flatMap {$ 0.1 [0] .contains (searchText)? $ 0.0 : nil}' – Callam

+0

와우 완벽한 답변! – Hunter

+0

@callam 예, 데이터 집합에 대해 알거나 알지 못하는 것에 따라 추가 할 수있는 많은 오류 방지 기능이 있습니다. –

1
var receivedList = [["Name1","Apple","Fresh"],["Name2","Orange","Rotten"],["Name3","Pear","Fresh"],["Name4","Grape","Rotten"]] 


func filter(keyword: String)-> [[String]] { 
    return receivedList.filter({ (stringArr) -> Bool in 
     for value in stringArr { 
      if value.lowercased().contains(keyword.lowercased()) { 
       return true 
      } 
     } 
     return false 
    }) 
} 


var filtered = filter(keyword: searchBar.text ?? "") //Here you will get filtered values 
관련 문제