Я ищу наиболее эффективный способ кодирования. У меня есть список ints или строк, и мне нужно знать, содержит ли одно из значений в этом списке во второй коллекции.Тест производительности
Если я использую словарь для этой второй коллекции, то я вышел с 5 различными способами поиска:
Dictionary<int, bool> dicSource = new Dictionary<int, bool>();
List<int> lstSearch = new List<int>();
// First approuce
var ids = dicSource.Keys.Intersect(lstSearch);
bool hasMatch1 = ids.Any();
//Second approuce
bool hasMatch2 = dicSource.Any(x => lstSearch.Any(y => y == x.Key));
//Third approuce
bool hasMatch3 = dicSource.Select(x => x.Key).Intersect(lstSearch).Any();
//Fourth approuce
bool hasMatch4 = (dicSource.Where(x => lstSearch.Contains(x.Key)).Count() > 0);
//Fifth approuce
for (int i = 0; i < lstSearch.Count; i++)
{
bool hasMatch5 = dicSource.ContainsKey(lstSearch[i]);
}
С другой стороны, я могу использовать другой список для второй коллекции, а затем я вышел с 5 поисковые запросы:
List<int> lst = new List<int>();
List<int> lstIds = new List<int>();
// First approuce
var ids = lst.Intersect(lstIds);
bool hasMatch1 = ids.Any();
//Second approuce
bool hasMatch2 = lst.Any(x => lstIds.Any(y => y == x));
//Third approuce
bool hasMatch3 = lst.Select(x => x).Intersect(lstIds).Any();
//Fourth approuce
bool hasMatch4 = (lst.Where(id => lstIds.Contains(id)).Count() > 0);
//Fifth approuce
for (int i = 0; i < lstSearch.Count; i++)
{
bool hasMatch5 = lstSource.Contains(lstSearch[i]);
}
Может кто-нибудь, пожалуйста, скажите мне, что является самым эффективным способом использования здесь?
У вас есть 4 варианта. Большой! Почему бы вам не проверить их самостоятельно? –
См. [Как измерить производительность кода в .NET?] (Http://stackoverflow.com/questions/457605/how-to-measure-code-performance-in-net). – CodeCaster