如何將數組(如下例所示的數組)放入Perl中的哈希中?我試過用數組引用,但它不起作用。我如何使它工作?我希望通過執行散列(除此之外)實質上去除重複。使用數組作爲鍵創建Perl哈希
回答
正則散列只能有字符串鍵,所以你需要爲你的數組創建一些散列函數。簡單的方法是簡單地將數組元素(例如join)
$h{join('-', @a)} = \@a; # A nice readable separator
$h{join($;, @a)} = \@a; # A less likely, configurable separator ("\034")
但是這種方法(使用sentinel值)要求你選擇一個在鍵中找不到的字符。下列不從問題的困擾:
$h{pack('(j/a*)*', @a)} = \@a;
另外,檢查出Hash::MultiKey可以採取更復雜的關鍵。
我添加了一些更多的細節。我希望你不介意。 – ikegami
我試着用數組引用,但它不工作
搞笑的是,(新)駱駝書的361頁有一個段落標題: 引用不工作作爲哈希鍵
所以,你證明了駱駝書是正確的。然後它繼續告訴你如何解決它,使用Tie::RefHash。
我想你應該買這本書。 (順便說一下,(1,1)可能被稱爲Python中的元組,但它在Perl中被稱爲列表)。
要使用哈希刪除陣列式兩份:
my %hash;
@hash{@array} = @array;
my @unique = keys %hash;
或者,您可以使用map
創建哈希:
my %hash = map {$_ => 1} @array;
-1:不解決OP無法將非標量值用作散列鍵的問題。 –
我不同意。它處理他真正的問題(在帖子結尾處),即使用散列來重新排列數組。這向我建議他將數組設置爲散列鍵來達到的目的是將數組中的每個元素分配爲散列中的單獨鍵。 – stevenl
同意它展示瞭如何使用哈希去重數據集,但是我讀到的問題是集合中的數據元素是元組,而不是每個元組的元素。所以,如果他不能使用元組作爲鍵,那麼使用'keys'去除重複是不可能的。 OP可能會澄清他究竟是在扣除什麼? –
- 1. 爲哈希鍵值創建一個數組(Perl)
- 2. 如何從Perl中的哈希數組創建哈希散列?
- 3. 使用perl創建哈希表
- 4. 使用SQL查詢結果中的主鍵創建哈希表的哈希表作爲哈希表鍵值
- 5. 使用列數據作爲鍵的Perl哈希陣列
- 6. 使用兩個數組創建哈希
- 7. 將數組列名作爲鍵的Perl哈希值
- 8. 使用參數ruby作爲哈希鍵
- 9. 使用存儲在Perl中的數組哈希中的鍵切片哈希
- 10. 在Perl中使用哈希和數組
- 11. 如何使用現有數組作爲Perl中的哈希值?
- 12. 使用數組作爲哈希表
- 13. Perl - 返回哈希數組
- 14. Perl哈希和數組
- 15. 如何創建哈希鍵
- 16. 以Month爲鍵創建日期對象數組中的哈希
- 17. 從哈希表數組的鍵創建數組
- 18. Perl哈希哈希
- 19. 參考哈希鍵的鏈哈希一個Perl哈希
- 20. 創建一個整數和值爲整數的哈希集鍵的哈希表
- 21. Perl:哈希中的Grep鍵
- 22. 默認哈希鍵在Perl
- 23. Perl unicode哈希鍵查找
- 24. 使用Perl插入哈希值爲數組到MYSQL數據庫使用Perl
- 25. 反轉哈希:從一個數組中創建多個哈希鍵
- 26. 如何在matlab中使用座標作爲哈希鍵來構建哈希表?
- 27. 如何在perl中創建兩個數組的哈希映射(鍵值對)
- 28. 用不同的鍵創建哈希數組的CSV
- 29. 如何創建數組的哈希在Perl
- 30. 在perl中創建數組中的哈希
你需要設計自己的哈希算法爲你的陣列,然後用它作爲你的鑰匙。 –
你能舉個例子嗎? –
這不可能:所有密鑰都必須是字符串。但是,您可以連接數組的各個部分以形成一個可以保證不會出現在值中的字符。這可能是一個NUL字節:'$ h {join「\ x00」,@a} = 1'。 – amon