【问题标题】:@result_list = grep { test($_) } @unfiltered_list in other languages?@result_list = grep { test($_) } @unfiltered_list 其他语言?
【发布时间】:2010-11-16 18:49:03
【问题描述】:

我喜欢 Perl 的其中一个功能是受 LISP 启发的 (?) 功能,可以使用简单的语法从事物列表中过滤出内容

@result_list = grep { test($_) } @unfiltered_list;

其中测试函数将应用于@unfiltered_list 的所有项目以生成@result_list。

这是其他语言中也存在的功能吗? (PHP?Python?)否则,我怎么能轻易地通过这些代码向非 Perlers(学生)暗示我的意思?

解决方案:filter 在大多数语言中,as seen on wikipedia。谢谢你的提示,伙计们。

【问题讨论】:

  • 您有特定的语言吗?正如您所指出的,这在 Lisp 及其变体中可用。
  • 在大多数高级语言中,如果它们支持grep,则称为filtergrep 缩短了两个字符,因此更加腐朽(而且更加独特):)
  • Eric Strom:“大多数”意味着你知道几个;你能说说它们是什么吗?
  • @ysth:见en.wikipedia.org/wiki/…select 这个名字也很常见。
  • @ether:我们的目标是向计算机科学专业的学生解释一些事情,这些学生有一些早期的 Java 经验,虽然我不能确定,但​​可能已经接触过 PHP/Python。我会避免“选择”参考,因为我的目的是提供对 ADA“选择”结构的解释:P

标签: perl language-features filtering porting metalanguage


【解决方案1】:

在python中有filter函数:

result_list = filter(test,unfiltered_list)

【讨论】:

    【解决方案2】:

    在 C++0x 中,您可以使用 std::copy_ifback_inserter 迭代器来执行此操作。 Lambda 函数也使这变得更加容易。

    【讨论】:

    • 或者在C++03中,如果你不介意自己写简单的函数模板copy_if
    • 比自己写std::copy_if还要容易——std::remove_copy_if可以和std::not一起使用(stackoverflow.com/questions/1448817/…)
    • 感谢您的指出。尽管像往常一样,C++ 中的简单解决方案变得令人恐惧。
    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多