in reply to Combining Duplicate entries in an Array
If you step through the array backward, you can delete (splice) out the redundant elements safely.
This will do it, but the code doesn't format nicely:
#! perl -slw use strict; use Data::Dump qw[ pp ]; my @a = map[ split ], <DATA>; substr( $a[$_-1][0],0,-1 ) eq substr( $a[$_][0],0,-1 ) and do{ $a[$_-1][1] += $a[$_][1]; splice @a, $_, 1; } for reverse 1 .. $#a; pp \@a; __DATA__ 19.25.55.11.144.0 5 19.25.55.14.16.0 12 19.25.59.200.208.0 8 19.25.59.204.160.0 7 19.25.60.5.176.0 4 19.25.60.15.48.0 0 19.25.60.17.240.0 3 19.25.60.18.96.0 5 19.25.115.138.224.0 30 19.25.115.141.32.0 4 26.109.108.64.144.0 1 38.153.162.89.0.0 1 38.153.162.89.0.1 0 38.153.162.89.96.0 0 38.153.162.89.96.1 0 38.153.162.95.64.0 0 38.153.162.95.64.1 0 58.152.64.24.192.0 1 58.152.64.24.192.1 0 58.152.64.46.48.0 3 58.152.64.46.48.1 0 58.152.94.71.0.0 1 58.152.94.71.0.1 0
Output:
C:\test>junk [ ["19.25.55.11.144.0", 5], ["19.25.55.14.16.0", 12], ["19.25.59.200.208.0", 8], ["19.25.59.204.160.0", 7], ["19.25.60.5.176.0", 4], ["19.25.60.15.48.0", 0], ["19.25.60.17.240.0", 3], ["19.25.60.18.96.0", 5], ["19.25.115.138.224.0", 30], ["19.25.115.141.32.0", 4], ["26.109.108.64.144.0", 1], ["38.153.162.89.0.0", 1], ["38.153.162.89.96.0", 0], ["38.153.162.95.64.0", 0], ["58.152.64.24.192.0", 1], ["58.152.64.46.48.0", 3], ["58.152.94.71.0.0", 1], ]
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Combining Duplicate entries in an Array
by mmartin (Monk) on Feb 22, 2012 at 20:18 UTC | |
|
Re^2: Combining Duplicate entries in an Array
by mmartin (Monk) on Feb 22, 2012 at 19:39 UTC |