几个月来我一直在全职编写 perl 代码(生物信息学),并且一直在努力提高我的技能。就在今天,我突然意识到我从不使用 map 或 grep。回顾我的代码,我意识到这些工具可以在这里或那里为我节省几行代码,但只是以牺牲 foreach 循环的灵活性为代价。我的问题如下:
除了节省一两行代码之外,您是否遇到过使用 map 或 grep 比 foreach/for 循环带来显着优势的情况?
谢谢你的时间!
最佳答案
Schwartzian Transform将是一个例子:
@sorted = map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { [$_, foo($_)] }
@unsorted;
你可以用一堆
foreach
来做到这一点。循环,但你必须把它们分开才能弄清楚发生了什么;一旦你看过施瓦兹变换,你就会立即认出这个习语。总的来说我认为
map
和 grep
好处在于它们允许您清晰紧凑地表达您的意图,而无需语法层。如果您看到 map
然后你就知道正在进行某种简单的数据结构转换;如果您看到 grep
那么您就知道正在进行一些过滤/选择。你可以用 foreach
来做这一切但是你的代码的意图并不像 map
那样清晰或 grep
;你甚至可以用 if
做这一切和 goto
如果您愿意,那么您的意图将被更多的语法和状态跟踪所掩盖。
关于perl - Perl中map或grep的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574800/