NSArray mit rotierendem Index

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Meine Varianten wären:

    a) ein zweidimensionales Array, -> dann sind die nachbarn von zelle x,y eben (x+1, y), (x-1, y), (x, y+1), (x, y-1) mit den Werten jeweils modulo dem Maximalwert in der entsprechenden Richtung, das vorher auszurechnen ist Quatsch, das bisschen Rechnerei erledigt ein Prozessor heutzutage nebenbei. Den Maximalwert legst du halt in deiner World-Klasse bei der Initialisierung ab.

    b) überhaupt kein Array, sondern ein Graph von Objekten. Jedes Objekt kennt seine Nachbarn (sprich hat eine Referenz auf Sie, abgelegt in Properties oder in einem Array) und das wars. Da musst du dir halt beim Initialisieren merken, welche Objekte ihre Nachbarn noch nicht vollständig kennen und die am Ende entsprechen setzen.

    Je nachdem was du hinterher damit machen willst, ist eben die eine oder die andere Variante schöner.

    Ansonsten: Schau dir doch mal eine der zigtausen GameOfLife Implementierungen an. Da wird vermutlich auch eine dabei sein, die einen Torus verwendet.

    Ein anderer Kommentar: nur weil etwas ein C-Array benutzt heisst das noch lange nicht, dass es kein schönes Objective-C sei. Nicht für alle Problemstellungen sind Objekte eine gute Lösung. In vielen Objekt-orientierten Sprachen hat man leider nur Objekte, weshalb alle möglichen Probleme in Objektform gegossen werden. Aber merke: "Wenn du nur einen Hammer besitzt, sieht alles aus wie ein Nagel." Objective-C erlaubt uns zum Glück auch die ganz klassische Imperative Programmierung zu verwenden.
  • murpsel schrieb:

    Amin Negm-Awad schrieb:

    NSArray* neighbors = [NSArray arrayWithObjects:upCell, rightCell, downCell, leftCell, nil];

    So was in der Art hab ich mir auch schon gedacht. Aber das wird ziemlich aufwändig im Konstruktor, da ja in der Initialisierungsschleife noch nicht alle Objekte vorhanden sind. Die Indizes aber kann ich jederzeit bereits festlegen.
    Abgesehen davon. Wie gestalte ich einen Aufruf in adäquater Form zu

    Quellcode

    1. next= [world.field objectAtIndex:c.nbh[dir]];
    2. if (next.typ) c= next;

    mit objectAtIndex kann ich ja nicht mehr arbeiten, wenn das nbh-Array Objekte enthält!

    Ich fang halt gerade erst mit ObjC an und muss mich durch vieles erst noch durchlesen. Gerade das ganze Memory Management und so.
    Aber wie gesagt, mein Code läuft ja (und zwar rattenschnell). Eigentlich ist dies eine View-Klasse und das Feld eine als Thorus zusammengeklappte Bitmap.

    1. Was wird daran aufwändig?

    2. next = [c.nbh objectAtIndex:dir];

    3. Es gibt keine Konstruktoren in Objective-C. Es gibt Allokatoren und Initialisierer. Man verwendet auch keine kryptischen Abkürzungen in Objective-C. Es wäre dienlich, wenn du zunächst die Sprache lernst. Wenn du vesuchst, ein C++-Programm in Objective-C zu schreiben, geht das in jeder Hinsicht in die Hose.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?