perl中是否有一个很好的衬里可以让你从字符串中创建一个唯一值数组?
property prop1(sig1,sig2,sig3,sig4);
@(posedge clk)
$fell(sig1) ##[1:$] first_match($fell(sig2)) ##0 sig3 |-> sig4 == sig3;
endproperty
我希望这个唯一的数组只包含“bob-2-4,bob-3-1”。
答案 0 :(得分:5)
没有模块:
sub uniq { my %seen; grep !$seen{$_}++, @_ }
使用常用模块:
use List::MoreUtils qw( uniq );
用法:
my $str = "bob-2-4 asdfasdfasdf bob-2-4 asdfasdf bob-3-1";
my @unique = uniq $str =~ m/(bob-\d-\d)/g;
say for @unique;
答案 1 :(得分:1)
如果您正在谈论唯一身份用户,那么该工作的工具就是哈希。
你可以这样做:
#!/usr/bin/env perl
use strict;
use warnings;
my $str = "bob-2-4 asdfasdfasdf bob-2-4 asdfasdf bob-3-1";
my %unique = map { $_ => 1 } $str =~ m/(bob-\d-\d)/g;
print keys %unique;
作为一个衬垫,直接进入你的阵列,你可以:
my @unique = keys %{{map { $_ => 1 } $str =~ m/(bob-\d-\d)/g}};
这大致相同 - 使用map
构造散列,然后使用keys
来提取唯一值。注意 - keys
不会返回已定义的订单。
如果排序很重要,您也可以使用grep
,但您仍然需要哈希:
my $str = "bob-2-4 asdfasdfasdf bob-2-4 asdfasdf bob-3-1";
my %seen;
my @unique = grep { not $seen{$_}++ } $str =~ m/(bob-\d-\d)/g;
print @unique;