1

我有一个数组和一个可能会改变的组值:

@array = ("The","quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog");
$group = 3;

我试图返回的结果是:

The
The quick
The quick brown

quick
quick brown
quick brown fox

换句话说,从第一个元素开始 & 将单词分组到 $group 值。我想遍历字符串单词边界(或数组元素)以收集这些组组合。我尝试了各种正则表达式组合、切片和转换,但均未成功。我我需要一个正则表达式和移位的组合(或 MAP [在我的头上])。

对构造的任何建议表示赞赏!

4

1 回答 1

4

将数据放入数组后,解决方案非常简单:

use List::Util qw/min/;
use 5.010;
my @words = (...);
my $group = 3;

for my $i (0 .. $#words) {
  # finding the maximum index for the slice
  for my $j ($i .. min($i + $group - 1, $#words)) {
    say join " ", @words[$i .. $j];
  }
}

在您的问题中未指定剩余元素少于剩余$group元素时如何处理其余部分,在这种情况下您也可以跳出循环。

实际上获取字符串的单词是一个有点困难的问题。最简单明智的解决方案是拆分非单词字符:

my @words = split /\W+/, $string;
于 2013-05-08T19:55:04.037 回答