Qual seria a melhor maneira de olhar em um string[]
para ver se ele contém um elemento. Essa foi minha primeira chance. Mas talvez haja algo que estou esquecendo. O tamanho da matriz não será maior que 200 elementos.
bool isStringInArray(string[] strArray, string key)
{
for (int i = 0; i <= strArray.Length - 1; i++)
if (strArray[i] == key)
return true;
return false;
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
Eu sei que isso é antigo, mas eu queria que os novos leitores soubessem que existe um novo método para fazer isso usando métodos genéricos e de extensão.
Você pode ler a postagem do meu blog para ver mais informações sobre como fazer isso, mas a ideia principal é esta:
Adicionando este método de extensão ao seu código:
você pode realizar sua pesquisa assim:
Funciona em qualquer tipo (contanto que você crie um bom método de igualdade). Qualquer tipo de valor com certeza.
fonte
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
que eu quero fazer é olhar através da tabela de dados who na primeira coluna para ver se os valores não terminam em nenhuma das seguintes strings .. se não terminarem, então eu quero retornar uma string informando que está faltando um valor,.00
por exemplo, usando seu exemplo, não consigo fazer este funcionar, é um pouco mais complicado, pois não quero retornar um bool Eu alterei seu método para retornar uma string, mas ainda não funciona nenhuma sugestãopublic static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Você está simplesmente atrás da função Array.Exists (ou do método de extensão Contains se estiver usando .NET 3.5, que é um pouco mais conveniente).
fonte
Linq (para s & g's):
ou, dependendo dos requisitos
fonte
A matriz está classificada? Nesse caso, você pode fazer uma pesquisa binária . Aqui está a implementação do .NET também. Se a matriz for classificada, uma pesquisa binária melhorará o desempenho em qualquer solução iterativa.
fonte
Os arrays são, em geral, uma estrutura de dados pobre para usar se você deseja perguntar se um objeto específico está na coleção ou não.
Se você estiver executando essa pesquisa com frequência, pode valer a pena usar um em
Dictionary<string, something>
vez de um array. As pesquisas em um dicionário são O (1) (tempo constante), enquanto a pesquisa na matriz é O (N) (leva o tempo proporcional ao comprimento da matriz).Mesmo que a matriz tenha apenas 200 itens no máximo, se você fizer muitas dessas pesquisas, o Dicionário provavelmente será mais rápido.
fonte
Você também pode usar o LINQ para iterar na matriz. ou você pode usar o método Find, que leva um delegado para pesquisá-lo. No entanto, acho que o método find é um pouco mais caro do que simplesmente fazer um loop.
fonte
Conforme mencionado muitas vezes no tópico acima, ele depende da estrutura em uso. .Net Framework 3 e superior tem os métodos .Contains () ou Exists () para matrizes. Para outras estruturas abaixo, pode fazer o seguinte truque, em vez de fazer um loop pela matriz ...
Não tenho muita certeza sobre a eficiência ... Dave
fonte
Isso é mais rápido do que iterar manualmente pela matriz:
fonte
Se você não quiser ou simplesmente não puder usar o Linq, você também pode usar a
Array.Exists(...);
função estática :https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Quando o Predicado retornar verdadeiro uma vez que catInside, também será verdadeiro.
fonte