ATTR1, ATTR2, ATTR3 키가있는 (NSDictionary * 레코드)가 있습니다.Objective C iOS에서 문자열 파싱이 효율적입니다.
나는 동적 인 where 절을 sql lite 데이터베이스에 적용해야한다. 그러나 가져 오기 요청을 작성하기 전에 술어는 "ATTR1 = % @ AND ATTR2 = % @ AND ATTR3 = % @"형식이어야합니다. 또한 정적 문자열 whereClause이 "ATTR1 = : ATTR1 및 ATTR2 = : ATTR2 및 ATTR3 = : ATTR3"형식으로 정의되어 있습니다 (참고 :이 형식은 변경할 수 없으며 고객의 프로덕션 서버에서 정의됩니다). 동적 인 말은 ": ATTR1", ": ATTR2", ": ATTR3"이 위에 언급 된 사전 변수 레코드의 값으로 대체되어야 함을 의미합니다.
따라서 술어를 만들려면 인출 요청을 실행하기 위해 다음 문자열 및 배열 속성을 만들어야합니다.
"ATTR1 = % @ AND ATTR2 = % @ AND ATTR3 = % @"
[ "ATTR1", "ATTR2", "ATTR3"] I 발견 용액 아래와 같았다
:NSString * whereClause = @"ATTR1=:ATTR1 AND ATTR2=:ATTR2 AND ATTR3=:ATTR3";
NSArray * primaryTokens = [whereClause componentsSeparatedByString: @":"];
NSUInteger primaryTokenCount = [primaryTokens count];
NSMutableString * finalWhereClause = [[NSMutableString alloc] initWithString:primaryTokens[0]];
NSMutableArray * attributes = [[NSMutableArray alloc]init];
if(primaryTokenCount >1)
{
for(int i=0;i<(primaryTokenCount-1);i++){
NSArray * secondaryTokens = [primaryTokens[i+1] componentsSeparatedByString: @" "];
NSUInteger secondaryTokenCount = [secondaryTokens count];
if(secondaryTokenCount > 1)
{
[finalWhereClause appendString:@"%@"];
NSArray * newSecondaryArray = [secondaryTokens subarrayWithRange:NSMakeRange(1,[secondaryTokens count]-1)];
[finalWhereClause appendString:@" "];
[finalWhereClause appendString:[newSecondaryArray componentsJoinedByString:@" "]];
}
[attributes addObject:secondaryTokens[0]];
}
[finalWhereClause appendString:@"%@"];
}
NSLog(@"THE FINAL PARSED STRING IS : %@",finalWhereClause);
NSLog(@"THE FINAL ATTRIBUTES IS : %@",[attributes componentsJoinedByString:@","]);
위의 코드가 작동합니다. 그러나 3 개의 추가 배열을 사용하고 기본 루프가 실행될 때마다 구성 요소로 분리되는 오버 헤드가 있습니다. Objective C에서이 여분의 저장 영역을 넘나 드는 것을 피하기 위해이 구문 분석을 수행하는 효율적인 방법이 있습니까? 이 방법은 광범위하게 호출됩니다. 따라서 어떤 도움을 주시면 감사하겠습니다.
추가 솔루션을 사용하는 것보다 훨씬 낫습니다. 그러나 LIKE 쿼리의 이러한 상황을 해결할 수있는 방법이 있습니까? 입력 whereClause : ATTR1 = : ATTR1과 ATTR2 LIKE '% : ATTR2 %'및 ATTR2 = : ATTR4 및 ATTR3 = : ATTR3. 출력은 다음과 같습니다. ATTR1 = % @ AND ATTR2 LIKE '%% @ AND ATTR2 = % @ AND ATTR3 = % @ 속성 : ATTR1, ATTR2 %', ATTR4, ATTR3 –