Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

gruppiertes sortieren

6 views
Skip to first unread message

Christian Anders

unread,
Feb 2, 2013, 5:57:23 PM2/2/13
to
Ich muss eine Adressenliste gruppieren und sortieren. Die Gruppierung
ist gelungen:

require 'yaml'
address="\
schueler:
- name: Erich
gruppe: Y
- name: Max
gruppe: A
- name: Lea
gruppe: B
- name: Pia
gruppe: A
- name: Anna
gruppe: B
"
adressen = YAML.load (address)

schuelergruppe=adressen['schueler'].group_by {|x| x['gruppe']}

schuelergruppe.sort.each do |y|
puts '# ' + y[0]
schuelergruppe[y[0]].each do |z|
puts z['name']
puts''
end
end


Wie kann ich innerhalb der Gruppen nach dem Namen sortieren, sodass
folgendes herauskommt?

# A
Max

Pia

# B
Anna

Lea

# Y
Erich


danke,

christian

Christian Anders

unread,
Feb 3, 2013, 4:20:52 AM2/3/13
to
Christian Anders <christi...@gmx.net> wrote:
> Ich muss eine Adressenliste gruppieren und sortieren. Die Gruppierung
> ist gelungen:
nun auch die Sortierung. Die Adressenliste muss in ganz
unterschiedlichen Formaten und zu unterschiedlichen Zwecken ausgegeben
werden. Da wï¿œre es toll, wenn beispielsweise die Gruppierung und
Sortierung in eine Methode gepackt wï¿œre. Ich fï¿œrchte, dass es sonst
unï¿œbersichtlich wird. Das steht noch aus. Vllt kann mir ja jemand den
Weg weisen.

require 'yaml'
address="\
schueler:
- name: Erich
gruppe: Y
- name: Max
gruppe: A
- name: Lea
gruppe: B
- name: Pia
gruppe: A
- name: Anna
gruppe: B
"
adressen = YAML.load (address)

schuelergruppe=adressen['schueler'].group_by {|x| x['gruppe']}

schuelergruppe.sort.each do |y|
puts '# ' + y[0]
schuelergruppe[y[0]].sort_by {|k| k['name']}.each do |z|

Robert Klemme

unread,
Feb 3, 2013, 10:05:26 AM2/3/13
to
On 03.02.2013 10:20, Christian Anders wrote:
> Christian Anders <christi...@gmx.net> wrote:
>> Ich muss eine Adressenliste gruppieren und sortieren. Die Gruppierung
>> ist gelungen:
> nun auch die Sortierung. Die Adressenliste muss in ganz
> unterschiedlichen Formaten und zu unterschiedlichen Zwecken ausgegeben
> werden. Da wäre es toll, wenn beispielsweise die Gruppierung und
> Sortierung in eine Methode gepackt wäre. Ich fürchte, dass es sonst
> unübersichtlich wird. Das steht noch aus. Vllt kann mir ja jemand den
> Weg weisen.

Wenn es nur um Ausgabe geht, kannst Du auch einfach zweistufig sortieren.

last = nil

adressen.sort_by {|x| [x['gruppe'], x['name']}.each do |x|
g = x['gruppe']

if g != last
puts "# #{g}"
last = g
end

puts x['name']
end

Ich würde übrigens eher eine Struct anstatt von Hashes verwenden

Schueler = Struct.new :name, :gruppe

Ciao

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Simon Krahnke

unread,
Feb 9, 2013, 7:48:23 PM2/9/13
to
* Robert Klemme <short...@googlemail.com> (2013-02-03) schrieb:

>On 03.02.2013 10:20, Christian Anders wrote:
>> Christian Anders <christi...@gmx.net> wrote:
>>> Ich muss eine Adressenliste gruppieren und sortieren. Die Gruppierung
>>> ist gelungen:
>> nun auch die Sortierung. Die Adressenliste muss in ganz
>> unterschiedlichen Formaten und zu unterschiedlichen Zwecken ausgegeben
>> werden. Da w�re es toll, wenn beispielsweise die Gruppierung und
>> Sortierung in eine Methode gepackt w�re. Ich f�rchte, dass es sonst
>> un�bersichtlich wird. Das steht noch aus. Vllt kann mir ja jemand den
>> Weg weisen.
>
>Wenn es nur um Ausgabe geht, kannst Du auch einfach zweistufig sortieren.
>
>last = nil
>
>adressen.sort_by {|x| [x['gruppe'], x['name']}.each do |x|
> g = x['gruppe']
>
> if g != last
> puts "# #{g}"
> last = g
> end
>
> puts x['name']
>end
>
>Ich w�rde �brigens eher eine Struct anstatt von Hashes verwenden
>
>Schueler = Struct.new :name, :gruppe

Und das funktioniert mit YAML?

mfg, simon .... l

Robert Klemme

unread,
Feb 10, 2013, 6:52:38 AM2/10/13
to
On 10.02.2013 01:48, Simon Krahnke wrote:
> * Robert Klemme <short...@googlemail.com> (2013-02-03) schrieb:
>
>> On 03.02.2013 10:20, Christian Anders wrote:
>>> Christian Anders <christi...@gmx.net> wrote:
>>>> Ich muss eine Adressenliste gruppieren und sortieren. Die Gruppierung
>>>> ist gelungen:
>>> nun auch die Sortierung. Die Adressenliste muss in ganz
>>> unterschiedlichen Formaten und zu unterschiedlichen Zwecken ausgegeben
>>> werden. Da wäre es toll, wenn beispielsweise die Gruppierung und
>>> Sortierung in eine Methode gepackt wäre. Ich fürchte, dass es sonst
>>> unübersichtlich wird. Das steht noch aus. Vllt kann mir ja jemand den
>>> Weg weisen.
>>
>> Wenn es nur um Ausgabe geht, kannst Du auch einfach zweistufig sortieren.
>>
>> last = nil
>>
>> adressen.sort_by {|x| [x['gruppe'], x['name']}.each do |x|
>> g = x['gruppe']
>>
>> if g != last
>> puts "# #{g}"
>> last = g
>> end
>>
>> puts x['name']
>> end
>>
>> Ich würde übrigens eher eine Struct anstatt von Hashes verwenden
>>
>> Schueler = Struct.new :name, :gruppe
>
> Und das funktioniert mit YAML?

irb(main):001:0> Schueler = Struct.new :name, :gruppe
=> Schueler
irb(main):002:0> didi = Schueler.new "Didi", "Sportler"
=> #<struct Schueler name="Didi", gruppe="Sportler">
irb(main):003:0> YAML.dump(didi)
=> "--- !ruby/struct:Schueler\nname: Didi\ngruppe: Sportler\n"
irb(main):004:0> copy = YAML.load(YAML.dump(didi))
=> #<struct Schueler name="Didi", gruppe="Sportler">

Christian Anders

unread,
Feb 11, 2013, 4:36:46 PM2/11/13
to
Robert Klemme <short...@googlemail.com> wrote:
> On 03.02.2013 10:20, Christian Anders wrote:
>> Christian Anders <christi...@gmx.net> wrote:
>>> Adressenliste gruppieren und sortieren.
[snip]
> Wenn es nur um Ausgabe geht, kannst Du auch einfach zweistufig sortieren.
[snip]
> Ich würde übrigens eher eine Struct anstatt von Hashes verwenden
[snip]

danke
0 new messages