Portál AbcLinuxu, 7. června 2025 22:25


Dotaz: PERL odstranenie duplicit v v poli poli (2-dimenzinalnom)

6.12.2010 01:48 xsustek | skóre: 6
PERL odstranenie duplicit v v poli poli (2-dimenzinalnom)
Přečteno: 222×
Odpovědět | Admin
Ahojte,

napada niekoho algoritmus alebo nejaky odkaz na vymazanie duplicit v 2-dimenzionalnom poli (resp. poli referencii na polia). Nejde o duplicity referencii.
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.12.2010 02:35 buff | skóre: 10 | blog: buff
Rozbalit Rozbalit vše Re: PERL odstranenie duplicit v v poli poli (2-dimenzinalnom)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj. Nerozumím, co přesně chceš. Řekněme, že máš pole

@pole = (
  [1, 2],
  [3, 4],
  [1, 2],
  [2, 2]
);

Co má být na výstupu?
6.12.2010 03:43 xsustek | skóre: 6
Rozbalit Rozbalit vše Re: PERL odstranenie duplicit v v poli poli (2-dimenzinalnom)
Na vystupe ma byt pole @pole = ( [1, 2], [3, 4], [2, 2] );

6.12.2010 09:58 Ondřej Kopka | skóre: 20 | blog: ondrejk
Rozbalit Rozbalit vše Re: PERL odstranenie duplicit v v poli poli (2-dimenzinalnom)
Podívej se na tohle, mělo by to fungovat i ve tvém případě:
perldoc -q duplicate
6.12.2010 10:48 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: PERL odstranenie duplicit v v poli poli (2-dimenzinalnom)
pokial tie polia nie su moc rozsiahle, tak si vystacis aj s niecim takymto:
@pole = (
  [1, 2],
  [3, 4],
  [1, 2],
  [2, 2]
);

my %h;
@pole = grep {$h{join(":",@$_)}++ == 0} @pole;

use Data::Dumper;
print Dumper(\@pole); 
wamba avatar 6.12.2010 17:13 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: PERL odstranenie duplicit v v poli poli (2-dimenzinalnom)
Odpovědět | | Sbalit | Link | Blokovat | Admin
No s využitím uniq_by s CPAN by to šlo takhle:

use warnings;

use strict;

use 5.010;

use Data::Dumper;


sub uniq_by(&@)

{

 my $code = shift;


 my %present;

 return grep {

 my $key = $code->( local $_ = $_ );

 !$present{$key}++

 } @_;

}


my @x =  ([1, 1], [2, 2], [3, 5], [2, 2], [3,4], [2,1], [1,1]);

say Dumper( uniq_by { "@$_"  } @x);
This would have been so hard to fix when you don't know that there is in fact an easy fix.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.