2011-05-25 98 views
1

我正逐行循环一个文件,它有键 - >值对,然后输出到xml。我如何进行检查以确保我还没有输出这个键/值对? 在C#中,我会通过插入字典,然后使用.Contains(),perl中的任何提示来做到这一点。perl防止键值重复

+0

答案很好。你也可以考虑在输入文件中使用'uniq'。 – Alex 2011-05-26 01:04:02

回答

6

Perl拥有对散列元素进行操作的definedexists关键字。

$hash{'foo'} = 'bar'; 
print defined $hash{'foo'};  # prints 1 
print exists $hash{'foo'};  # prints 1 

对于大多数用途,他们做同样的事情。一个微妙的区别是当散列值是特殊的“未定义”值:

$hash{'baz'} = undef; 
print defined $hash{'baz'};  # doesn't print 1 
print exists $hash{'baz'};  # prints 1 
3

你可以使用perl hash来做同样的事情。

my %seen; 
while (my $line = <$filehandle>) 
{ 
    next if ($seen{$line}); 
    print $line; 
    $seen{$line} = 1; 
} 
+0

如果($ $ {$ line});如果(exists $ seen {$ line});',则将'next'更改为'next;否则逻辑错误值如空字符串或字符串“0 “将永远不会被打印。 – 2011-05-25 21:59:39

+4

@Consp条件是测试与*'$ line'关联的值*是否为true,并且'%seen'中的值将严格为undef或1.也就是说,循环体可以被压缩为更加紧凑和习惯'print $行,除非$看见{$ line} ++;'。 – 2011-05-25 22:05:10

+0

我的不好。不知何故,我只读了循环的三行中的两行,并假设你正在用字符串内容填充散列。即键/值存储。 – 2011-05-26 08:59:39