【问题标题】:Perl: array splitting and complex mergingPerl:数组拆分和复杂合并
【发布时间】:2018-11-20 10:19:13
【问题描述】:

我有以下字符串A B C D E F G H I J。我想用它做一个数组,所以我用这个

my @string = split/(\W)/, $text;

它工作正常,我得到一个 20 行的数组,如下所示:

A

B

C

D

...

现在,我想将此数组拆分为给定数量的块(在这种情况下假设为 4 个),因此我想象为 4 个较小的数组,每个数组 5 行,看起来像这样 @1 = A, ,B, ,C ,@ 2 = ,D, ,E,、@3 = F, ,G, ,H 和 @4 = ,I, ,J,。 最后,我想交错这 4 个数组,以获得一个输出数组,其中我首先有每个数组的第一行,每个数组的第二行,依此类推......最后看起来像这样:

A

F


D

I
B

G


E

J
C

H

如何做到这一点?

【问题讨论】:

  • 您的split 会将空格间隔添加为单独的元素。但你似乎知道这一点,正如你所说的@1 = A, ,B, ,C等。很难相信这是你想要的,所以请确认。
  • 你确定你需要的不是 Perl 教程吗?您似乎在非常基本的概念上磕磕绊绊。
  • 您已被引导至模块List::MoreUtils,它的功能zip/mesh 在您之前的相同问题中。该问题被标记为重复,因为它已被回答。再次发布相同的问题将不会完成任何事情。如果您在将建议的解决方案应用于您的问题时遇到问题,请询问有关您尝试过的代码的问题。这就是这个网站的用途。不是为了获取免费代码。
  • 您在对上一个问题的评论中提到您尝试了链接副本中的第一个解决方案,但它不适合您。请edit您的问题包括您尝试过的代码、您得到的输出以及任何错误。或者,正如@TLP 多次提到的那样,只需使用List::MoreUtils 中的zip 函数......这可能会更容易。

标签: arrays perl merge


【解决方案1】:
  1. 在 Perl 中创建一个数组切片:

    my @oldArray = (a, ,b, ,c, ,d, ,e, ,f, ,g, h, ,i, ,j, );
    
    my @newArray1 = @oldArray[elemIndex1,elemIndex2,elemIndexN];
    

    或

    my @newArray1 = @oldArray[firstElemIndex..lastElemIndex]
    

    其中elemIndex 是newArray 数组中所需元素的索引。

    firstElemIndex..lastElemIndex 用于当您希望连续索引位于切片数组中时。

  2. 在数组末尾添加元素:

    push(@interleavedArray,$newArray1[elemIndex]);
    

    其中$newArray1[elemIndex] 是您要添加到@interleavedArray 的@newArray1 中的元素

  3. 按顺序添加元素:

    只需做一个 for 循环:

    for my $index (0..3){
        push(@interleavedArray,$newArray1[$index]);
        push(@interleavedArray,$newArray2[$index]);
        push(@interleavedArray,$newArray3[$index]);
        push(@interleavedArray,$newArray4[$index]);
        }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多