【发布时间】:2012-10-01 13:37:22
【问题描述】:
我有一个复杂结构的哈希,我想执行搜索和替换。第一个哈希如下:
$VAR1 = {
abc => { 123 => ["xx", "yy", "zy"], 456 => ["ab", "cd", "ef"] },
def => { 659 => ["wx", "yg", "kl"], 456 => ["as", "sd", "df"] },
mno => { 987 => ["lk", "dm", "sd"] },
}
我想迭代地搜索所有 '123'/'456' 元素,如果找到匹配项,我需要比较子层,即['ab','cd','ef'] 和 ['as','sd','df'],在这种情况下, 只保留带有 ['ab','cd','ef'] 的那个。所以输出如下:
$VAR1 = {
abc => { 123 => ["xx", "yy", "zy"], 456 => ["ab", "cd", "ef"] },
def => { 659 => ["wx", "yg", "kl"] },
mno => { 987 => ["lk", "dm", "sd"] },
}
所以删除是基于子结构,而不是索引。怎么做到呢?感谢您的帮助!
假设我将声明要保留的值,即我将保留 456 => ["ab", "cd", "ef"] 基于预先声明的值 ["ab", "cd ", "ef"] 并在其他任何地方删除 456 的任何其他实例。搜索必须针对每个键。因此代码将通过哈希,首先取 123 => ["xx", "yy", "zy"] 并将其与哈希其余部分的键进行比较,如果未找到匹配项,则不执行任何操作。如果找到匹配项,例如 456 => ["ab", "cd", "ef"],它将比较两者,正如我所说,在匹配的情况下,带有 [" ab", "cd", "ef"] 将被保留,它将保留 456 => ["ab", "cd", "ef"] 并丢弃散列中其他任何位置的 456 的任何其他实例,即它将在这种情况下删除 456 => ["as", "sd", "df"]。
【问题讨论】:
-
看看perldsc.. 都是这些东西而已.. 特别是
hashes of hashes -
您应该指定应该如何决定要保留哪个条目。
-
你让我看这个。我只能说“什么?”
-
请教你的智慧@ikegami...:) 我已经编辑了这个问题。 'what' 被定义为 456 => ["ab", "cd", "ef"]。现在我的问题是怎么做?
标签: perl search hash structure