Delphi의 Case 문에서 문자열을 판별 변수로 사용 Chen Jiaxin╱[email protected]● 서문에서 Case 문을 언급할 때 가장 먼저 떠오르는 응용 사례는 프로그램 흐름에서 선택할 수 있는 변수 결정을 통한 것입니다. 다양한 조건에 따라 실행을 계속하기에 적합한 경로입니다. 또는 프로그램에 일련의 if 및 else if 문 조합이 있는 경우 Case 문을 사용하여 프로그램 코드를 단순화하고 가독성과 실행 효율성을 향상시키는 것을 종종 생각합니다. 그러나 어떤 경우에는 Case 문이 허용하는 판별 변수가 xPRession 및 순서 유형의 모든 형태로 제한되기 때문에 우리 프로그램에 적용할 수 없습니다. 정수, 문자, 열거형, 부울 및 집합을 포함하며 Ord(), Pred(), Succ(), Low() 및 High() 등에 적용할 수 있습니다. 표현식 유형([1] 참조). 안타깝게도 문자열(string)은 분명히 순서형이 아니며 어느 시점(아래 예가 주어질 것임)에서 조건변수의 유형이 문자열이고 조건부 분기가 꽤 많이 있을 때 무기력하긴 하지만, 그러나 아쉽게도 if 및 else if 문을 많이 사용하는 것 외에는 다른 방법이 없는 것 같습니다. 예를 들어, 다음 코드는 Delphi에서 허용되지 않습니다: #001 var #002 Str: String; // 문자열 유형 #003 start #004 case Str of // 오류 메시지: Ordinal type require #005 / / ... #006 end; #007 end;이것은 단순히 컴파일할 수 없으므로 전통적인 솔루션은 일반적으로 이를 많은 수의 if 및 else if 문의 조합으로 변환하는 것입니다. 이 시점에서는 다음 코드가 컴파일러에서 허용되기 때문에 Visual Basic을 사용하고 싶었습니다([5] 참조). #001 Dim Str As String ' 문자열 유형의 판별 변수를 선언합니다. #002 Select Case Str '은 동일합니다. Delphi의 Case 문 #003 '... #004 End Select ' OK, 컴파일을 통해. 그래서 이 글에서 저자는 "if와 else의 조합으로 변환하는 것 외에"에서 이 문제를 출발점으로 삼으려고 합니다. if 문은 "전통적인 솔루션 외에 다른 실행 가능한 솔루션을 찾고 있습니다."라고 말하고 이 기사가 이 문제에 직면하고 솔루션을 찾고자 하는 사람들에게 도움이 되기를 진심으로 바랍니다. ([12]-[14]를 읽은 후 저자는 추가로 이것이 실제로 사실임을 발견했습니다) 도움이 됩니다. 먼저 미리 살펴보겠습니다. 처음 5가지 방법은 [9]-[13]에서 발췌하거나 확장한 것이며, 여섯 번째 방법은 저자가 구현한 포괄적인 멀티로더입니다. 버전. 이러한 옵션은 다음과 같습니다. v 옵션 1: 문자열 배열 검색 v 옵션 2: 실제 인덱스 사용 v 옵션 3: 해시 함수 사용 v 옵션 4: 중첩된 사례 문 v 옵션 5: TStringList 사용v 옵션 6: 멀티로드 기능 구현 솔루션 7: 적용 이 기사는 조건문(주요 내용은 [1] 및 [4] 참조) 및 인식 문자열(주요 내용은 [2] 참조)과 같은 주제를 검토하는 것으로 시작됩니다. 이 섹션에서는 기사 끝부분의 "성능 문제" 섹션을 직접 읽어보세요.