Проверьте, соответствует ли какой-либо объект в списке какому-либо объекту в другом списке

Коллега попросил, чтобы я записал остроту для замены следующего метода:

public static bool IsResourceAvailableToUser(IEnumerable<string> resourceRoles, IEnumerable<string> userRoles)
{
    foreach (var userRole in userRoles)
        foreach (var resourceRole in resourceRoles)
            if (resourceRole == userRole)
                return true;
    return false;
}

Resharper и я придумали это:

public static bool IsResourceAvailableToUser(IEnumerable<string> resourceRoles, IEnumerable<string> userRoles)
{
    return userRoles.Where(resourceRoles.Contains).Count() > 0;
}

Существует ли лучший путь?

11
задан grenade 24 March 2010 в 13:46
поделиться

1 ответ

Учитывая LINQ, да:

return userRoles.Intersect(resourceRoles).Any();

Обратите внимание, что помимо использования Intersect , чтобы превратить его в O (m) + O (n) вместо O (m * n), используя Любое более эффективно, чем использование Count ()> 0 - вы узнаете ответ, как только найдете первое совпадение.

23
ответ дан 3 December 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: