【发布时间】:2016-04-16 11:57:59
【问题描述】:
我想以迭代方式在散列(数组的散列)中列出的数组中找到公共元素,然后将每个“交集”除以第一个数组的标量值。迭代每个数组与其他数组的交集。
my @CS1= ("c1", "c2", "c3", "c4", "-c5");
my @CS2= ("c1", "c2", "c8", "c9");
my @CS3= ("c1", "c2", "c3");
my %CSHash= ( "set1" => [@CS1],
"set2"=> [@CS2],
"set3" => [@CS3],
);
我提出的解决方案:但是,它不会产生所需的输出。
my %union=();
my %isect=();
my $cumLativeIsect=0;
foreach my $lst(keys %CSHash)
{
my $elCount=0;
foreach my $ele(@{$CSHash{$lst}})
{
$elCount++;
$union{$ele}++ && $isect{$ele}++;
}
my @intrsection= keys %isect;
if($elCount!=0 && scalar @intrsection!=0 )
{
$cumLativeIsect+= scalar @intrsection/$elCount;
}
}
从数学上讲,我正在寻找以下计算(intr=intersection): Intrsection=|{(cs1 intr cs1)/cs1+ (cs1 intr cs2)/cs1+ (cs1 intr cs3)/cs1}|+|{(cs2 intr cs2)/cs2+ (cs2 intr cs1)/cs2+ (cs2 intr cs3)/ cs2}|+|{(cs3 intr cs1)/cs1+ (cs3 intr cs2)/cs1+ (cs3 intr cs3)/cs3}|
【问题讨论】:
-
您的代码似乎甚至没有尝试解决问题。它只是一些数据结构定义。请显示您遇到问题的代码,并说明您遇到了什么问题以及您的问题是什么。实现这个“不使用Perl 中的预定义函数”的要求很奇怪。这是作业吗?
-
@Borodin 你确定,我的代码对你不可见吗?我有包含字符串的数组(CS1,CS2),然后将它们列在哈希中。我所需要的只是处理该哈希数组以找出数组彼此的迭代交集。
-
这不是代码,因为它实际上并没有做任何事情。您没有尝试实际解决问题,这使得这看起来像是“为我做作业”的请求。
-
和“不使用Perl中的预定义函数”也是一个非常类似家庭作业的限制。不使用预定义函数就不可能编写有用的 Perl 程序
-
@Borodin 我同意我的问题应该更加务实,并寻求任何科学或技术帮助。但是,我对“Perl”还是很陌生,处理数据结构会导致很多复杂的循环形成。我一定要咨询“堆栈溢出”。为了方便读者,我现在改变了我的问题。
标签: arrays perl hash intersection