如何根据多个条件过滤列表?
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=true
或onTheSpotServices=true
的结果
最有效的处理方法是什么?
【问题讨论】:
orgList.where((org) => homeVisits && org.homeVisits || onTheSpotServices && org.onTheSpotService || ... etc etc)
@pskink:太好了。请提供您的评论作为答案
【参考方案1】:
不需要级联多个if-else
s
改为使用单个 where
和自定义 test
函数:
filteredOrganizationList = orgList.where((org) =>
homeVisits && org.homeVisits ||
onTheSpotServices && org.onTheSpotService ||
... // rest of your filter tests
);
【讨论】:
顺便说一句,我刚刚意识到如果homeVisits
和 onTheSpotServices
都是 true
它会与您的原始代码有点不同,但我认为您会调用 performFiltering
并且只有一个过滤条件,如果没有,你必须使用:orgList.where((org) => homeVisits? org.homeVisits : onTheSpotServices? org.onTheSpotService : ... etc etc)
以上是关于如何根据多个条件过滤列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何过滤复杂对象的列表,以便如果两个具有字段值,我会根据条件删除一个