2011-05-25 123 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