2010-11-16 2 views
1

Одна из особенностей, которые я люблю в Perl является LISP-вдохновило (?) Возможность фильтрации содержимого из списка вещей, с простым синтаксисом

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

где функция тестирования будет применяться ко всем элементам @unfiltered_list для создания @result_list.

Это функция, которая существует и на других языках? (PHP? Python?) В противном случае, как я мог легко намекнуть не-Perlers (ученикам) о том, что я имею в виду с помощью такого кода?

РЕШЕНИЕ: filter на большинстве языков, as seen on wikipedia. Спасибо за подсказку, чуваки.

+1

У вас есть определенный язык в виду? Как вы указали, это доступно в Lisp и его вариантах. – Ether

+2

на большинстве языков высокого уровня, если они поддерживают 'grep', он называется' filter'. 'grep' - это два символа короче и, следовательно, больше perlish (и больше unixish) :) –

+0

array_filter() в PHP. – Matthew

ответ

2

В питоне есть filter функция:

result_list = filter(test,unfiltered_list) 
1

В C++ 0x вы можете сделать это с помощью std::copy_if с итератором back_inserter. Лямбда-функции делают это еще проще.

+0

Или в C++ 03, если вы не против писать простой шаблон функции 'copy_if' самостоятельно , – aschepler

+0

Это даже проще, чем писать std :: copy_if самостоятельно - std :: remove_copy_if можно использовать с std :: not (http://stackoverflow.com/questions/1448817/why-there-is-no-stdcopy-if- алгоритм) – Flexo

+0

спасибо, что указал. Хотя, как обычно, простые решения на C++ пугают. – PypeBros

Смежные вопросы