【问题标题】:How to ignore spaces in an hash table?如何忽略哈希表中的空格?
【发布时间】:2020-12-05 06:00:14
【问题描述】:

当我运行代码的哈希表时,该表似乎考虑了空格(“: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}++;
        }
    }   
}

提前感谢您的回答

【问题讨论】:

  • 在将它们用作键之前,通过从字符串中删除空格来规范化键?
  • $e2 ne ("Genres:" or ' ') 这不是你想要的。阅读 perl 语法。
  • 请提供文本,而不是图像,作为输入/输出示例。

标签: string perl hash


【解决方案1】:

正如 Shawn 在 cmets 中指出的那样,这并不符合您的想法:

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

ne 对两个标量值进行操作。 Perl 首先计算or 表达式:'Genres:' 为真,所以('Genres:' or ' ') 产生'Genres:'。条件过滤掉值为'Genres:'的键,但忽略' '

您需要重复ne 表达式,使用and

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

【讨论】:

    【解决方案2】:
    @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}++;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多