Tenho uma lista de parâmetros como esta:
public class parameter
{
public string name {get; set;}
public string paramtype {get; set;}
public string source {get; set;}
}
IEnumerable<Parameter> parameters;
E uma série de strings que eu quero comparar.
string[] myStrings = new string[] { "one", "two"};
Desejo iterar a lista de parâmetros e verificar se a propriedade source é igual a alguma da matriz myStrings. Eu posso fazer isso com foreach's aninhados, mas gostaria de aprender como fazê-lo de uma maneira mais agradável, já que tenho brincado com o linq e gosto dos métodos de extensão em enumeráveis como where etc, então foreachs aninhados parece errado. Existe uma maneira linq / lambda / delegete mais elegante de fazer isso.
obrigado
Intersect
, será mais rápido - se as listas forem trivialmente curtas, não importa de uma forma ou de outra (nesse caso, o desempenho provavelmente não é sua preocupação de qualquer maneira )parameters.Any(x => myStrings.Contains(x.source));
seria melhor do que seu primeiro exemplo?Aqui está um exemplo para descobrir se há elementos correspondentes em outra lista
fonte
Intersect
abordagem, pois é O (N * M) nos tamanhos das listas. (É O (1) na memória embora.)Se ambas as listas forem muito grandes e quando usarmos a expressão lamda, a busca demorará muito. Melhor usar o linq neste caso para buscar a lista de parâmetros:
fonte