2011-03-21 4 views
1

내 응용 프로그램에서 핵심 데이터 요청에 의해 가져온 배열 NSStrings 배열에서 문자열을 검색해야합니다. 페치 된 배열은 약 30,000 개의 항목을 포함하며 성장할 수 있도록 바인딩됩니다. strings 배열은 최대 수십만 개의 문자열 일 수 있습니다. 지금 코어 데이터 저장소에서 모든 문자열을 선택하고 strings 배열을 반복하고 NSPredicate를 만들고 핵심 데이터 가져 오기 배열을 필터링하는 데 사용합니다. 필자는 두 배열을 미리 정렬하여 각 결과 검색의 범위를 좁힐 수 있다고 생각했지만 술어를 사용하여 특정 위치에서 배열을 검색하는 것이 가능합니까?핵심 데이터, 정렬 된 검색 - 가능합니까?

안부 인사, 티모.

+0

'- [NSFetchRequest setSortDescriptors :]'를 호출하여 가져 오기 요청에서 반환 된 결과를 정렬 할 수 있습니다. 아니면 그보다 더 복잡한 것이 필요합니까? –

+0

글쎄, 나는 그것을 안다. 문제는 배열 요소를 직접 비교하여 말하자면 수동으로 생각하는 것입니다. 나는. 배열 중 하나를 반복하고, 현재 요소를 다른 배열의 현재 요소와 비교하고, 두 요소가 같으면 두 배열의 다음 요소로 진행하고, 그렇지 않으면 두 요소 중 하나의 다음 요소로 진행합니다. 배열 (지금은 그것을 작성했습니다, 그것은 합리적인 해결책처럼 보입니다). 그러나 거기에 더 많은 "자동"이 있습니까? 그것은 충분히 일반적인 taks처럼 보입니다. – Ibolit

+0

제가 이해했는지 확인하겠습니다. 두 세트의 문자열을 결합하려고합니까? 둘 다 잠재적으로 매우 큽니다. 코어 데이터에 하나 또는 둘 다 저장되어 있습니까? –

답변

0

코어 데이터에서 모든 문자열을 가져오고 싶지는 않습니다. 느리고 많은 메모리를 필요로합니다. NSPredicate를 사용하여 원하는 문자열을 필터링하고 NSFetchRequest를 제공하고 원하는 결과 만 가져옵니다. NSFetchRequest에 NSSortDescriptor를 추가하여 결과를 정렬 할 수도 있습니다.

+0

사실 데이터 저장소에서 모든 엔티티를 가져 오는 것은 NSPredicate를 사용하여 결과를 필터링하는 것과 비교하여 매우 빠릅니다. 문자열 속성 중 하나를 사용하여 엔티티를 정렬하고이를 다른 정렬 된 문자열 배열과 비교할 수 있습니다. 메모리에 관해서는, 내가 이해하는 한, Core Data는 해당 요소가 액세스 될 때만 전체 결과 집합의 제한된 부분만을 가져 오는 것을 처리합니다. – Ibolit

관련 문제