什么是等效的lambda

2024-05-16 07:13:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用lambda模拟以下python代码:

checkName = lambda list, func: func([re.search(x, name, re.I) for x in list])

if checkName(["(pdtv|hdtv|dsr|tvrip).(xvid|x264)"], all) and not checkName(["(720|1080)[pi]"], all):
  return "SDTV"
elif checkName(["720p", "hdtv", "x264"], all) or checkName(["hr.ws.pdtv.x264"], any):
  return "HDTV"
else:
  return Quality.UNKNOWN

我为长格式创建了以下C代码,但我确信可以使用lambda表达式将其缩短:

^{pr2}$

如果能帮助我提高理解力,我将不胜感激!因为我相信有一个更短/更简单的方法!在

所以在玩了几次之后,我把它简化为:

    private static bool CheckName(List<string> evals,
                           string name,
                           bool all)
    {

        if (all == true)
        {
            return evals.All(n => 
            {
                return Regex.IsMatch(name, n, RegexOptions.IgnoreCase);
            });
        }
        else
        // any
        {
            return evals.Any(n =>
            {
                return Regex.IsMatch(name, n, RegexOptions.IgnoreCase);
            });
        }
    }

但是必须有一个使用类似python代码的函数的等价物?在


Tags: lambda代码namerereturnifanyall
2条回答

像这样:

private bool CheckName(List<string> evals, string name, bool all)
{
    return all ? !evals.Any(x => !Regex.IsMatch(name, x, RegexOptions.IgnoreCase)) 
                : evals.Any( x => Regex.IsMatch(name, x, RegexOptions.IgnoreCase));
}

功能:

^{pr2}$
private bool CheckName(string eval, string name)
{
    return new Regex(eval, RegexOptions.IgnoreCase).Match(name).Success;
}

private bool CheckName(List<string> evals, string name, bool all)
{
  if (all == true)
  {
    return !evals.Any(eval => !CheckName(eval, name));
  }
  else
  {
    return evals.Any(eval => CheckName(eval, name));
  }
}

相关问题 更多 >