Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

binärer Suchbaum

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 13.03.2010 - 01:20    Titel: binärer Suchbaum Antworten mit Zitat

Ich brauchte für eine kleines Script eine Datenstruktur in der ich Werte unter Namen speichern kann. In diesem Fall ging es darum, herauszufinden, wieviele Stücke ein Album in iTunes hat. Es mußte also ein Zähler für jeden gefundenen Albumnamen her.

In Perl ist sowas einfach. Da nimmt man einen hash. AppleScript bietet eine solche Datenstruktur nicht. Also habe ich mir folgendes kleine Script geschrieben.

Es ist nicht perfekt.

  1. Wenn man sortiert einfügt, erhält man eine Liste. Zum Suchen muß also die gesamte Liste bis zum Treffer durchgegangen werden
  2. Man kann nur einfügen aber nicht löschen


Code:
set h to new_bintree()

tell h
   store("O", 15)
   store("E", 5)
   store("P", 16)
   store("C", 3)
   store("L", 12)
   store("T", 20)
   store("J", 10)
   store("N", 13)
   store("R", 18)
   store("W", 23)
   store("F", 6)
   store("G", 7)
   fetch("L")
   -- 12
   keys()
   -- {"C", "E", "F", "G", "J", "L", "N", "O", "P", "R", "T", "W"}
   values()
   -- {3, 5, 6, 7, 10, 12, 13, 15, 16, 18, 20, 23}
   treelist()
   -- {{{{"C", 3}}, {"E", 5}, {{{{"F", 6}, {{"G", 7}}}, {"J", 10}}, {"L", 12}, {{"N", 13}}}}, {"O", 15}, {{"P", 16}, {{{"R", 18}}, {"T", 20}, {{"W", 23}}}}}
   
end tell

on new_bintree()
   script entry
      property my_key : missing value
      property my_val : missing value
      property lower : missing value
      property higher : missing value
      
      to store(new_key, new_val)
         -- log ("store(" & new_key & ", " & new_val & ")")
         if my_key is missing value then
            set my_val to new_val
            set my_key to new_key as string
            return
         end if
         if new_key is my_key then
            set my_val to new_val
            return
         end if
         if new_key > my_key then
            if higher is missing value then
               set higher to new_bintree()
            end if
            return higher's store(new_key, new_val)
         else if lower is missing value then
            set lower to new_bintree()
         end if
         return lower's store(new_key, new_val)
      end store
      
      to fetch(a_key)
         -- log ("fetch(" & a_key & ")")
         if my_key is missing value then
            return missing value
         end if
         set a_key to a_key as string
         if my_key is a_key then
            return my_val
         end if
         if a_key > my_key then
            if higher is missing value then
               return missing value
            end if
            return higher's fetch(a_key)
         end if
         if lower is missing value then
            return missing value
         end if
         return lower's fetch(a_key)
      end fetch
      
      to keys()
         if lower is not missing value then
            set keylist to lower's keys()
         else
            set keylist to {}
         end if
         copy my_key to the end of keylist
         if higher is not missing value then
            return keylist & higher's keys()
         end if
         return keylist
      end keys
      
      to values()
         if lower is not missing value then
            set valuelist to lower's values()
         else
            set valuelist to {}
         end if
         copy my_val to the end of valuelist
         if higher is not missing value then
            return valuelist & higher's values()
         end if
         return valuelist
      end values
      
      to treelist()
         if lower is not missing value then
            set t to {lower's treelist()}
         else
            set t to {}
         end if
         copy {my_key, my_val} to the end of t
         if higher is not missing value then
            copy higher's treelist() to the end of t
         end if
         return t
      end treelist
      
   end script
   
   return entry
end new_bintree


Update: Fehler behoben. "key" muß String sein.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")


Zuletzt bearbeitet von Skeeve am 28.03.2010 - 21:50, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 13.03.2010 - 03:23    Titel: Antworten mit Zitat

Was hälst Du von:
Zitat:
tell application "iTunes"
   set a to selection of browser window 1
   set albumnames to {}
   set trackcounts to {}
   repeat with this in a
      set albumname to album of this
      if albumname is not in albumnames then
         set albumnames to albumnames & albumname
         set trackcounts to trackcounts & (count of (every track whose album is albumname))
      end if
   end repeat
   set myoutput to ""
   repeat with i from 1 to count of albumnames
      set myoutput to myoutput & item i of albumnames & tab & item i of trackcounts & return
   end repeat
   get myoutput as text
end tell

_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 13.03.2010 - 11:07    Titel: Antworten mit Zitat

Nix. weil ich auf Selektionen gearbeitet habe. Und was machst Du mit den 20 Alben die "Best Of" heißen oder "All for You" (Diana Krall bzw. Janet Jackson) oder "Alternative" von den Pet Shop Boys, das aus 2 CDs besteht? Nene... War schon gut so.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jzgerman
•->
•->


Anmeldedatum: 01.12.2015
Beiträge: 2

BeitragVerfasst am: 01.12.2015 - 14:35    Titel: Antworten mit Zitat

I would like to learn more about it seriously.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 25.01.2016 - 16:43    Titel: Antworten mit Zitat

Jzgerman hat Folgendes geschrieben:
I would like to learn more about it seriously.

It's long ago I wrote it. Simply take it and use it. Don't know what you'd else like to know.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jzgerman
•->
•->


Anmeldedatum: 01.12.2015
Beiträge: 2

BeitragVerfasst am: 24.02.2016 - 08:58    Titel: Antworten mit Zitat

gclub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter