+ -
当前位置:首页 → 问答吧 → 一个小问题

一个小问题

时间:2011-03-18

来源:互联网

本帖最后由 超级细菌 于 2011-03-18 10:01 编辑

请高手指教,我有一个文档,我需要从中找到一些东西然后把我找到的这些东西从中取出放到另一个文档中,原文档中不能再含有我已经找到的那些东西,该用什么命令啊?谢谢!
比方说:@list = (tomatoes, tomorrow, potatoes, phantom, Tommy);我需要匹配tom的单词并把他们放在另外一个数组中,而且@list中不再含有这些单词。

作者: 超级细菌   发布时间: 2011-03-18

一个思路:
遍历@list,把匹配tom的单词放到@a中,不匹配的放到@b中,然后@list = @b

作者: 珞水的大叔   发布时间: 2011-03-18

回复 珞水的大叔


    这个思路是不错,但觉得有点麻烦,不过还是谢谢了!

作者: 超级细菌   发布时间: 2011-03-18

那要么在遍历@list时,凡是匹配tom的,就把值置为undef,遍历完后@list里面就没有匹配tom的了

作者: 珞水的大叔   发布时间: 2011-03-18

回复 珞水的大叔


    那么该如何把值设为undef呢?

作者: 超级细菌   发布时间: 2011-03-18



QUOTE:
该用什么命令啊?



楼主可以顺着自己的思路往下考虑

你想要的命令是:@array2 = my_command(/PATTERN/, @array);

你可以到http://perldoc.perl.org/index-functions.html这里去找你的“命令”,看看有没有一样的或是相似的。

看着挺多,大概浏览一下,有个1,2十分钟就好了。如果找到了也省得发贴问了,没找到就说明没有,老老实实循环去。

作者: py   发布时间: 2011-03-18

回复 超级细菌


    如
  1. $list[2] = undef;
复制代码
6楼的意见很好,是学习的好方法,嘿嘿

作者: 珞水的大叔   发布时间: 2011-03-18

回复 py


    多谢了!

作者: 超级细菌   发布时间: 2011-03-18

回复 珞水的大叔

map,grep基本可以满足楼主需要。但楼主还要让原数组去除掉已经匹配的元素。这样的话就只能循环了。
@a = @b;这样的写法效率太低
设置undef不错,然后再用一次List::Util,基本就可以了。

还有一个办法,就是到CPAN上找找楼主要的这个“命令”,看看有没有什么模块支持。要是没有就干脆写一个List::Util::Extra,把这个“命令”加上。

作者: py   发布时间: 2011-03-18

回复 超级细菌

  1. my @list= qw(tomatoes tomorrow potatoes phantom Tommy);
  2. my @matched=grep /tom/,@list;
  3. @list=grep $_!~/tom/,@list;
  4. print "@matched\n";
  5. print "@list\n";
复制代码

作者: xfoucs   发布时间: 2011-03-18

热门下载

更多