列表理解中的多个过滤器在Erlang [英] Multiple filters in list comprehension in Erlang

查看:118
本文介绍了列表理解中的多个过滤器在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆