qingyun039 发表于 2018-04-20 18:39

翻转数组结构

本帖最后由 qingyun039 于 2018-04-21 11:29 编辑

请问有什么方法可以便捷的翻转数组结构,如 ] ]变为 ] ]?

唐胜 发表于 2018-04-21 09:15

用reverse函数试试

qingyun039 发表于 2018-04-21 11:44

唐胜 发表于 2018-04-21 09:15
用reverse函数试试

reverse 只能翻转数组成员的顺序呀(⊙o⊙)?这里是不是需要递归处理,因为一个数组里有标量还有数组,它们要区别对待,如果数组的话又是最初的问题,先把它翻转。

104359176 发表于 2018-04-22 13:37

是: ] ] 变为 [[],2],1 ] ?

qingyun039 发表于 2018-04-22 17:05

104359176 发表于 2018-04-22 13:37 static/image/common/back.gif
是: ] ] 变为 [[],2],1 ] ?

不是,应该是]],同一维度的成员位置可以任意,比如也可以]]。但是同一维度如果包含两个数组引用,如,]],则不可转化为]],因为它再转化为]]与最原始不同,所以一个维度包含两个数组引用视为不可翻转。

dahe_1984 发表于 2018-04-25 08:58

维度都变了?
数组中只是数字么?

523066680 发表于 2018-04-26 15:19

先大概实现,效率低下,没有做不可翻转的辨别。

# http://bbs.chinaunix.net/thread-4295208-1-1.html

use Data::Dumper;
$Data::Dumper::Indent = 0;

my $oldarr = ] ] ];
my $newarr = [];
convert( $oldarr, $newarr, 0 );

print Dumper $newarr;

sub convert
{
    my ( $oldarr, $newarr, $lv ) = @_;

    grep {push @$newarr, $_ if ( ref $_ ne "ARRAY" )} @$oldarr;

    for ( @$oldarr )
    {
      if ( ref $_ eq "ARRAY" )
      {
            @$newarr = ( [@$newarr] ) ;
            convert( $_, $newarr, $lv+1 );
      }
    }
}



输出
$VAR1 = [[[,2],3,4],5];
页: [1]
查看完整版本: 翻转数组结构