【问题标题】:Multiple filters in list comprehension in ErlangErlang中列表理解中的多个过滤器
【发布时间】:2013-04-08 14:05:52
【问题描述】:

假设我有一个包含天气的列表:

1> Weather = [{toronto, rain}, {montreal, storms}, {london, fog}, 
    {paris, sun}, {boston, fog}, {vancouver, snow}].

要让有雾的地方,我可以这样做:

2> FoggyPlaces = [X || {X, fog} <- Weather].
[london,boston]

现在我想检索既有雾又有雪的地方。我试过了,但它只检索下雪的地方,

3> FoggyAndSnowyPlaces = [X || {X, fog} <- Weather, {X,snow} <- Weather].
[vancouver,vancouver]

我期待[london,boston,vancouver]

如何包含多个过滤器?

【问题讨论】:

  • 同样在理解中,模式中的变量总是新的变量,它们会影响同名变量。所以Xs没有隐式匹配。

标签: erlang


【解决方案1】:
FoggyAndSnowyPlaces = [X || {X, Y} <- Weather, (Y == fog) or (Y == snow)].

您混淆了 generators (Pattern &lt;- List) 和 filters(布尔条件)。多个生成器的工作方式与其他语言中的嵌套循环类似,因此在您的3&gt; 中您会得到两次vancouver,因为第一个生成器会生成两个值。

【讨论】:

  • 我只提到过滤器是因为{X,fog} 模式据说可以作为过滤器来检索有雾的地方。所以,从这个意义上说,我想知道是否可以根据多个天气匹配创建一个新列表。
  • 经过两个小时的思考,我想,我头顶的迷雾终于散去。谢谢。
猜你喜欢
  • 2017-05-07
  • 2011-12-28
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2011-03-02
  • 2018-01-25
相关资源
最近更新 更多