列表理解中的多个过滤器在Erlang [英] Multiple filters in list comprehension in Erlang
本文介绍了列表理解中的多个过滤器在Erlang的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
1>天气= [{toronto,rain},{montreal,storms},{london,fog},
{paris,sun},{boston,fog},{vancouver,snow}]。
为了获得有雾的地方,我可以这样做:
2> FoggyPlaces = [X || {X,雾}< - 天气]。
[london,boston]
现在我想要检索有雾和下雪的地方。我试过这个,但它只检索下雪的地方,
3> FoggyAndSnowyPlaces = [X || {X,雾}< - 天气,{X,雪}< - 天气]。
[温哥华,温哥华]
我期待着 [london ,boston,vancouver]
。
如何添加多个过滤器?
解决方案
FoggyAndSnowyPlaces = [X || {X,Y}< - 天气,(Y ==雾)或(Y ==雪)]。
你很困惑生成器( - 列表
)和过滤器(布尔条件)。多个发生器像其他语言的嵌套循环一样工作,因此在 3>
中,您将获得 vancouver
两次,因为第一个生成器两个值。
Say I have a list that contains weather:
1> Weather = [{toronto, rain}, {montreal, storms}, {london, fog},
{paris, sun}, {boston, fog}, {vancouver, snow}].
To get foggy places, I could do this:
2> FoggyPlaces = [X || {X, fog} <- Weather].
[london,boston]
Now I want to retrieve places that are both foggy and snowy. I tried this, but it retrieves only snowy places,
3> FoggyAndSnowyPlaces = [X || {X, fog} <- Weather, {X,snow} <- Weather].
[vancouver,vancouver]
where I was expecting [london,boston,vancouver]
.
How can I include multiple filters?
解决方案
FoggyAndSnowyPlaces = [X || {X, Y} <- Weather, (Y == fog) or (Y == snow)].
You are confusing generators (Pattern <- List
) and filters (boolean conditions). Multiple generators work like nested loops in other languages, so in your 3>
you get vancouver
twice because the first generator produces two values.
这篇关于列表理解中的多个过滤器在Erlang的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文