【问题标题】: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:太好了。请提供您的评论作为答案

标签: arrays list flutter math search


【解决方案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)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多