Usando strings como variáveis discriminantes na instrução Case do Delphi Chen Jiaxin╱[email protected]● Ao mencionar instruções Case na introdução, o primeiro caso de aplicação que vem à mente é através de Determinar variáveis para permitir que o fluxo do programa escolha um caminho adequado para continuar a execução de acordo com diferentes condições. Ou, quando há uma série de combinações de instruções if e else if em nosso programa, muitas vezes pensamos em usar instruções Case para simplificar o código do programa e melhorar sua legibilidade e eficiência de execução. No entanto, em alguns casos, as instruções Case não podem ser aplicadas aos nossos programas porque as variáveis discriminantes que elas permitem são limitadas a qualquer forma de xPRession) e o tipo ordinal. Estes são os chamados "tipos ordinais" que se referem aos "ordenados", como. inteiros, caracteres, enumerações, booleanos e conjuntos, e podem ser aplicados a coisas como Ord(), Pred(), Succ(), Low() e High() O tipo de expressão (veja [1]). Infelizmente, string (string) obviamente não é um tipo ordinal e, em algum momento (um exemplo será dado abaixo), quando o tipo da variável de condição é uma string e há algumas ramificações condicionais, embora seja indefeso, no entanto, parece não haver outra maneira além de usar muitas instruções if e else if, infelizmente. Por exemplo, o seguinte código não é permitido no Delphi: #001 var #002 Str: String; // Declara uma variável discriminante do tipo String #003 begin #004 case Str of // Mensagem de erro: tipo ordinal necessário #005 // ... #006 end; #007 end;Isso simplesmente não pode ser compilado, então a solução tradicional geralmente é convertê-lo em uma combinação de um grande número de instruções if e else if. Neste ponto eu realmente gostaria que estivéssemos usando Visual Basic, porque o seguinte código é permitido por seu compilador (veja [5]): #001 Dim Str As String ' Declara uma variável discriminante do tipo String #002 Select Case Str ' é equivalente para a instrução Case #003 do Delphi '... #004 End Select 'OK, através da compilação. Portanto, neste artigo, o autor tenta usar esse problema como ponto de partida, em "Além de converter em uma combinação de if e else. if afirma "Procurando outras soluções viáveis além das soluções tradicionais", e espero sinceramente que este artigo possa ser útil para pessoas que estão enfrentando este problema e estão ansiosas para encontrar uma solução (depois de ler [12]-[14], o autor ainda descobri que este é realmente o caso) Ajuda. Deixe-me dar uma prévia primeiro. Pretendo apresentar 7 soluções. Os primeiros 5 métodos são trechos ou extensões de [9]-[13], e o sexto método é um multi-loader abrangente implementado pelo autor. versão. Essas opções são: v Opção 1: Matriz de sequência de procura v Opção 2: Usar índice real v Opção 3: Usar função hash v Opção 4: Instrução case aninhada v Opção 5: Usar TStringListv Opção 6: Implementar função de carregamento múltiplo Solução 7: Aplicar instruções prontas. Este artigo começará revisando tópicos como declarações condicionais (conteúdo principal consulte [1] e [4]) e strings de reconhecimento (conteúdo principal consulte [2]). Nesta seção, leia a seção "Problemas de desempenho" diretamente no final do artigo.