如何根据多个条件过滤列表?

Posted

技术标签:

【中文标题】如何根据多个条件过滤列表?【英文标题】:How to filter a list based on multiple conditions? 【发布时间】:2020-08-16 21:23:58 【问题描述】:

我正在尝试过滤具有多个条件的List。主要的是,如果它是true,我必须使用条件,而不是false。如果条件是false,我不应该使用它来过滤。下面是我的代码

void performFiltering(bool homeVisits, bool onTheSpotServices)
  
    //Check for home and on the spot filtering
    if(homeVisits==true)
    
      filteredOrganizationList = orgList.where((org) => org.homeVisits==true);
    
    else if(onTheSpotServices==true)
    
      filteredOrganizationList = orgList.where((org) => org.onTheSpotService==true);
    
    else if(homeVisits==true && onTheSpotServices==true)
    
      filteredOrganizationList = orgList.where((org) => (org.onTheSpotService==true) ||(org.homeVisits==true) );

    

  

在这里我做了简单的if-else 声明。不严重。但是当有更多的条件时,我不能这样做。幸运的是,这只是 2 个条件,但我还有更多条件要做。

还要注意我在最后一条语句中使用了OR 命令。这意味着获得homeVisits=trueonTheSpotServices=true 的结果

最有效的处理方法是什么?

【问题讨论】:

orgList.where((org) => homeVisits && org.homeVisits || onTheSpotServices && org.onTheSpotService || ... etc etc) @pskink:太好了。请提供您的评论作为答案 【参考方案1】:

不需要级联多个if-elses

改为使用单个 where 和自定义 test 函数:

filteredOrganizationList = orgList.where((org) =>
  homeVisits && org.homeVisits ||
  onTheSpotServices && org.onTheSpotService ||
  ... // rest of your filter tests      
);

【讨论】:

顺便说一句,我刚刚意识到如果 homeVisitsonTheSpotServices 都是 true 它会与您的原始代码有点不同,但我认为您会调用 performFiltering 并且只有一个过滤条件,如果没有,你必须使用:orgList.where((org) => homeVisits? org.homeVisits : onTheSpotServices? org.onTheSpotService : ... etc etc)

以上是关于如何根据多个条件过滤列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤复杂对象的列表,以便如果两个具有字段值,我会根据条件删除一个

Access 2010:根据特定组合框条件过滤字段中包含多个值的报表

多个条件的过滤列表

基于Python中的多个条件进行过滤

如何过滤具有多个条件的托管对象实体

React:使用多个复选框过滤数组列表