Schrift
[thread]6739[/thread]

sortieren: aufwändiges sortieren

Leser: 2


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
Froschpopo
 2005-02-25 03:27
#52121 #52121
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich habe ein verzeichnis. In dem verzeichnis befinden sich rund 20.000 Dateien deren Dateinamen folgendermaßen aufgebaut sind:

1041-1108442405.jpg
1070-1108442406.jpg
1151-1108442407.jpg
1189-1108442408.jpg
1238-1108442409.jpg
1259-1108442410.jpg
1267-1108442411.jpg
1278-1108442412.jpg
1303-1108442413.jpg
1307-1108442414.jpg

nun will ich die dateien alle ausgeben, jedoch nach time sortiert. time ist das ergebnis der time() funktion, also die sekunden nach epochenbeginn (aufsteigend bis heute). Also im grunde ganz einfach. nehmen wir einfach an, die dateinamen sind in @array gespeichert.
kabel
 2005-02-25 08:29
#52122 #52122
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
my @sorted= map {
        $_->[1]
} sort {
        $a->[0] <=> $b->[0]
} map {
        [substr ($_, 5, 10), $_]
} @array;


ich stell mir grad vor, wie ich das in java machen würde ... *g*\n\n

<!--EDIT|kabel|1109313151-->
-- stefan
Taulmarill
 2005-02-25 12:07
#52123 #52123
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
timtowtdi:
Code: (dl )
my @sorted = sort { substr ($a, 5, 10) <=> substr ($b, 5, 10) } @array;


imho sollte kabels lösung performanter sein während meine weniger RAM frisst.

Quote
ich stell mir grad vor, wie ich das in java machen würde ... *g*

warscheinlich würdest du wahnsinnig werden, bevor du fertig bist. ich rühre java auf jeden fall nicht an, solange ich nicht muss.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
pq
 2005-02-25 13:07
#52124 #52124
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=kabel,25.02.2005, 07:29]ich stell mir grad vor, wie ich das in java machen würde ... *g*[/quote]
du bist ja krank...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2005-02-25 14:50
#52125 #52125
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
java.util.Arrays.sort(array, new java.util.Comparator() {
public int compare (Object o1, Object o2)
{
return ((String) o1).substring(5, 15).compareTo(((String) o2).substring(5, 15));
}
});

War gar nicht so schwer.

Aber mit welcher hellseherischen Eingebung kommt Ihr eigentlich drauf, dass time() gerade substr(5. 10) ist? Wenn Froschpopo das dazugeschrieben haette, haette ich schon letzte Nacht geantwortet...\n\n

<!--EDIT|betterworld|1109335976-->
vayu
 2005-02-25 15:12
#52126 #52126
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
[quote=kabel,25.02.2005, 07:29]
Code (perl): (dl )
1
2
3
4
5
6
7
my @sorted= map {
        $_->[1]
} sort {
        $a->[0] <=> $b->[0]
} map {
        [substr ($_, 5, 10), $_]
} @array;

[/quote]
:) kann mir mal jemand den code für doofe erklären? :)\n\n

<!--EDIT|vayu|1109337217-->
pq
 2005-02-25 15:14
#52127 #52127
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=betterworld,25.02.2005, 13:50]War gar nicht so schwer.[/quote]
na ob das aber so schnell wie die ST ist?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2005-02-25 15:15
#52128 #52128
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=vayu,25.02.2005, 14:12]:) kann mir mal jemand den code für doofe erklären? :)[/quote]
http://www.google.com/search?....lang_de
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2005-02-25 15:18
#52129 #52129
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=vayu,25.02.2005, 14:12]kann mir mal jemand den code erklären?[/quote]
Man muss das praktisch von unten nach oben lesen: Zuerst wird mit map{} jeder Dateiname durch ein anonymes Array ersetzt, das als erstes den besagten Substring und als zweites den urspruenglichen Dateinamen enthaelt. Dann wird mit sort{} die Liste dieser anonymen Arrays jeweils nach ihrer ersten Komponente sortiert. Und dann wird mit map{} wieder jedes dieser Arrays durch seine zweite Komponente ersetzt, also den urspruenglichen Dateinamen.

Sag bescheid, wenn das nicht verstaendlich war, aber vergewisser Dich, dass Du perldoc -f sort und perldoc -f map gelesen hast.
renee
 2005-02-25 15:21
#52130 #52130
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
was map macht, kannst Du in perldoc -f map nachlesen, bei sort halt perldoc -f sort...

Zum besseren Verständnis, kannst Du ja mal folgendes Programm laufen lassen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#! /usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @array = qw(1307-1108442414.jpg
1041-1108442405.jpg
1070-1108442406.jpg
1303-1108442413.jpg
1151-1108442407.jpg
1189-1108442408.jpg
1278-1108442412.jpg
1238-1108442409.jpg
1259-1108442410.jpg
1267-1108442411.jpg);

my @map_eins = map{[substr($_,5,10),$_]}@array;
print Dumper(\@map_eins);

my @sort = sort{$a->[0] <=> $b->[0]}@map_eins;
print Dumper(\@sort);

my @map_zwei = map{$_->[1]}@sort;
print Dumper(\@map_zwei);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2005-02-25 03:27.