【问题标题】:Perl Concatenating 2 hashes based on a certain keyPerl 基于某个键连接 2 个哈希
【发布时间】:2016-08-31 21:54:51
【问题描述】:

嗨,我有两个哈希值 %Asset 和 %Activity

%Asset
Name,Computer Name
David,X
Clark,Y
Sam,Z

%Activity
Name,Activity
David,A
Clark,B
Sam,C
David,D
Clark,E
Sam,F

第二个哈希的名称重复了多次(可以超过 2 个).. 我想得到一个带有简洁信息的哈希.. 类似

Name,Computer Name,Activity
David,X,A&D
Clark,Y,B&E
Sam,Z,C&F

我的想法是伪代码;

foreach (@Activity{qw[Name]}) {
    push @Asset{qw[Name Activity]}, $Activity['Activity']

}

【问题讨论】:

  • 在我看来你想加入两个表并返回一个数组。我没有看到您的(非常令人困惑的)伪代码中涉及任何哈希。
  • 是的,我愿意使用数组或散列 .. 实际目标是将它们结合起来......两个名称都相同......

标签: perl hash concatenation hashtable


【解决方案1】:

你想要的是散列的散列。从概念上讲,您可以将有关资产的所有信息组合到一个哈希中。

my %dave = (
    name          => "Dave",
    computer_name => "X",
    activity      => "A"
);

然后这会进入一个更大的散列,其中包含以它们的名称为键的所有资产。

$Assets{$dave{name}} = \%dave;

如果您想查找 Dave 的活动...

print $Assets{Dave}{activity};

您可以提取有关 Dave 的所有信息并将其作为散列引用传递。

 my $dave = $Assets{Dave};
 print $dave->{activity};

这种结构不可避免地会导致将资产建模为对象。

您可以在Perl Data Structures Cookbook 中了解有关哈希的更多信息。

【讨论】:

  • 实际的问题陈述是我需要结合这些信息..如何有效地实现这一点..哈希实际上是两个不同的表,我将从其中填充哈希。字段名称是两个表之间唯一的东西...第二个表的名称可以重复多次,因此我们需要查看所有实例,将它们组合起来,然后将它们放入最终哈希中..
  • @Muzammil 我假设%Activity 的名称是键,活动的值是$Activity{David} = "A"。每个名称只能有一个条目,因此不会像您一样重复。但是@Activity{qw[Name]} 没有任何意义。你能通过编辑你的帖子并写出你在实际 Perl 代码中拥有的数据结构来解决这个问题吗?
猜你喜欢
  • 2012-02-09
  • 1970-01-01
  • 2015-07-19
  • 2011-08-16
  • 1970-01-01
  • 2018-08-26
  • 2012-06-09
  • 2018-02-01
  • 1970-01-01
相关资源
最近更新 更多