首页 > 解决方案 > 如何忽略哈希表中的空格?

问题描述

当我运行代码的哈希表时,该表似乎考虑了空格(“:405%”)。我们如何过滤它?我试图用 if 条件来做,但它似乎不起作用。

my @g = ();
foreach my $e (@genres){ 
    my $genre = $e->as_text;
    @g = split(/[à| ]/,$genre);
    foreach my $e2 (@g){ 
        if ($e2 ne ("Genres:" or ' ') ) {
            $index{$e2}++;
        }
    }   
}

在此处输入图像描述

预先感谢您的回答

标签: stringperlhash

解决方案


@g = split(/[à| ]/,$genre);
foreach my $e2 (@g){ 
    if ($e2 ne ("Genres:" or ' ') ) {
        $index{$e2}++;
    }
}

很多这很奇怪。让我们一次看一行。

@g = split(/[à| ]/,$genre);

我不知道你为什么分手[à| ]。特别是,我在您的数据中看不到任何“à”实例。通过分割空格,你会得到一个包含三个元素的数组——第一个是类型,第二个总是冒号,第三个是百分比。

foreach my $e2 (@g){

现在你正在走你的阵列。但我认为您只对作为数组第一个元素的类型感兴趣。那么为什么要看另外两个呢?

if ($e2 ne ("Genres:" or ' ') ) {

这根本不像你认为的那样。您一次只能与一个值进行比较。所以这需要是:

if ($e2 ne 'Genres:' and $e2 ne ' ') {

而且,即使那样,第一个表达式也永远不会匹配,因为您的流派字符串都不是“流派”,并且它们都不包含冒号(除了,正如我们之前所说,第二个元素@g将只包含一个冒号。

我认为您真正想要的是:

my ($genre_name, $percent) = split(/ : /, $genre);
if ($genre_name ne 'Genres' and $genre_name ne ' ') {
    $index{$e2}++;
}

推荐阅读