将元素推入perl中的数组并递增它们

时间:2015-03-30 14:42:33

标签: arrays perl push increment

我想做类似的事情:

  1. 将所有IP写入数组@iplist
  2. 检查数组%iplist2中是否存在IP。
  3. 如果存在,则增加此ip的值。
  4. 如果不存在,请将此ip添加到值为1的列表中。
  5. 我试过这样的事情:

    for ($i = 0; $i < $list*3; $i+=3) {
       push(@iplist, $tablist[$i+1]); #This work ok.
    
       #But here I have problem.
       if (grep $_ eq $tablist[$i+1], @iplist2) {
          # Here I want to increment value of $iplist2($tablist[$i+1]). 
          # I know, that probably I need to use something like 
          # $iplist2($tablist[$i+1]) = old_value + 1, but I don't know how exactly 
          # to do it. 
       } 
       else {
          # Here I want to push to array %iplist2 ip adres and make value 1 
          # for this ip. (Something like push %iplist2, $tablist[$i+1]=>1).
       }
    }
    

    或许有人有其他想法怎么做?我只需要有adres ip和一些值的数组。如果ip存在于数组中,只需增加值。

    @edit

    一些示例:

    例如我有127.0.0.1并且它不在数组中。因此,IP 127.0.0.1的值为1。我们有例如IP 111.111.111.111,它已经在表格中并且具有值4。所以我需要为此值添加+ 1。

    也许它看起来会更好:127.0.0.1不存在,所以我需要执行以下操作:$iplist2{127.0.0.1} = 1;并且111.111.111.111存在且具有一定价值。 $iplist2{111.111.111.111} = some_value.所以我需要增加这个值:$iplist2{111.111.111.111} = some_value + 1。我在$tablist[$i+1]

    中的IP地址

2 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西。想法是更新grep调用中的IP计数。我展示了如何按照它们在列表中出现的顺序生成ip列表。但您也可以使用keys %ipcounts以未指定的顺序检索相同的列表。

#!/usr/bin/perl

# Some data in a list with 3 items per ip
my @list = ('dummy', '127.0.0.1',   'dummy',
            'dummy', '192.168.0.1', 'dummy',
            'dummy', '127.0.0.1',   'dummy');

# Compute interesting indices
my @list_idx = map { 1+3*$_ } 0..($#list/3);

my %ipcounts = ();
my @iplist   = grep { !$ipcounts{$_}++ } @list[@list_idx];

print "IP LIST: \n-", join("\n-", @iplist), "\n";
print "IP COUNT:\n";
map { print "-", $_, " -> ", $ipcounts{$_}, "\n" } keys(%ipcounts);

答案 1 :(得分:0)

我差不多完成了。现在我不知道如何检查具有此IP的阵列是否已存在。现在它就像:

for ($i = 0; $i < $list*3; $i+=3) {
   push(@iplist, $tablist[$i+1]); #This work ok.

   #But here I have problem.
   if (grep $_ eq $tablist[$i+1], @iplist2) #I have no idea how make this if.
   {
      $iplist2{$tablist[$i+1]} += 1; 
   } 
   else {
      $iplist2{$tablist[$i+1]} = 1;
   }
}

如果巫婆检查是否存在$ iplist2的某个元素,其中关键字是ip,我需要做一些。 所以我的意思是:

if($iplist2($some_key_word) already exists) then
#do something
else
#do something