2016-07-20 10 views
-2

Perl Datenstruktur

Ich habe eine Frage bezüglich Perl Datenstrukturen.

Ich habe eine Datei 1.txt mit den folgenden Feldern und Daten.

Student rollno class 
John,23,2 
Mike,25,2 
Ray,78,3 
Tim,30,3 
Mark,22,2 

Können Sie mir bitte helfen, wie die Ausgabe in Perl drucken können?

Ich spalte die Datei und bekomme ein Array, stolpert aber über die Ergebnismenge. Können Sie bitte beschreiben, wie ich die Ausgabe wie folgt bekommen kann?

2= john, mike, mark 
3= ray, tim 

Ich brauche eine Datenstruktur, die diese Ergebnismenge kombinieren würde.

+1

Wie haben Sie versucht, das Problem bisher zu lösen? –

+0

Es ist sehr schwer, Ihnen zu helfen, Ihr Programm zu reparieren, wenn Sie Ihren Code nicht zeigen. Sind das Hausaufgaben? – Borodin

Antwort

0

Wenn Sie für jede die 3. Spalte als Schlüssel verwenden, können Sie eine Hash of Arrays einrichten, um die Daten zu verwalten. Laden Sie zuerst die Datei und teilen Sie die Felder durch Kommas in ein Array auf. Richten Sie dann die Datenstruktur wie in Zeile 28 des Beispiels "Erzeugen eines Hashs von Arrays" im verlinkten Dokument beschrieben ein. Sobald Sie das alles zusammen haben, müssen Sie es einfach wieder ausdrucken, genau wie in den verlinkten Beispielen.

Ein Quickie Beispiel dieser Strategie könnte wie folgt aussehen (beachten Sie, dass ich die Daten im __DATA__ Abschnitt des Skripts haben, anstatt aus einer Datei zu lesen):

#!/usr/bin/perl 
use warnings; 
use strict; 

my %results; 
while (<DATA>) { 
    chomp; 
    my @elems = split(/,/, $_); 
    push(@{$results{$elems[2]}}, $elems[0]); 
} 

for my $key (sort { $a <=> $b } keys %results) 
    print "$key = "; 
    print join(', ', @{$results{$key}}), "\n"; 
} 

__DATA__ 
John,23,2 
Mike,25,2 
Ray,78,3 
Tim,30,3 
Mark,22,2 

Der Ausgang erzeugt sieht wie folgt aus:

2 = John, Mike, Mark 
3 = Ray, Tim 
+0

wahrscheinlich möchten Sie die Ausgabe sortieren: 'für meine $ Schlüssel (sortieren {$ a <=> $ b} Schlüssel% Ergebnisse)' – ysth

+0

Vielen Dank. Korrigieren Sie mich, wenn ich falsch liege, aber Sortierung wird nur die Daten neu anordnen. Wir wollen die Art von Gruppe nach Ergebnis nach Klasse. – Efficasy

+0

@ysth Ja, das ist ein guter Punkt. Wenn es meine Daten wären, würde ich wahrscheinlich genau so sortieren, wie Sie es vorgeschlagen haben, nur damit wir keine Situation bekommen, in der '3' vor '2' abdruckt, je nachdem wie auf den Hash zugegriffen wird. Ich werde mit dieser Codeverbesserung bearbeiten. – drmrgd