【问题标题】:Split a string into a hash of arrays in perl在 perl 中将字符串拆分为数组的哈希
【发布时间】:2016-05-21 01:04:24
【问题描述】:

我有一个看起来像这样的字符串

This is sentence one.%%%0.3%%%0.6%%%This is sentence two.%%%0.4%%%0.9%%%

等等。百分号只是用作分隔符,我可以根据需要更改它们。

我需要这样结束:

{
    'This is sentence one' => [0.3, 0.6],
    'This is sentence two' => [0.4, 0.9]
}

我可以将它拆分为一个数组或散列没有问题,唯一给我带来麻烦的是让每个第一个段成为键,而每个其他段都成为数组的元素。了解 perl,可能有一种非常有效的方法可以在一行中做到这一点!

【问题讨论】:

    标签: arrays string perl hash


    【解决方案1】:

    您需要将数据拆分为一个数组并一次取出三个项目,使用三个中的第一个作为键,其余的在数组引用中

    这样

    use strict;
    use warnings 'all';
    
    use Data::Dump;
    
    my $str = 'This is sentence one.%%%0.3%%%0.6%%%This is sentence two.%%%0.4%%%0.9%%%';
    
    my %data;
    
    {
        my @data = split /%%%/, $str;
    
        while ( @data >= 3) {
            my @item = splice @data, 0, 3;
            $data{ shift @item } = \@item;
        }
    }
    
    dd \%data;
    

    输出

    {
      "This is sentence one." => [0.3, 0.6],
      "This is sentence two." => [0.4, 0.9],
    }
    

    【讨论】:

    • 请有人解释一下赞成票吗?我认为我不应该期待对编写工作代码的支持。这只是常识性编程。这在任何语言中都非常相似,除了可怕的 C,它根本没有固有的有用数据结构,C++,它专注于制作 C 对象而不是提供一个合适的库,以及 Java,它几乎是可移植的 C++,需要虚拟机才能运行。
    • 我认为,如果人们会以类似的方式回答(而不是发布另一个类似的答案)......或者如果您的答案比他们发布的更好。
    • @Joshua:我想这是有道理的。但这意味着我先发帖会得到积分,我不喜欢这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2015-07-10
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多