Array-Frage



  • Ich habe eine Kiste mit dieser Unterteilung:

    Kiste 1: Artikel 1 bis 33
    Kiste 2: Artikel 34 bis 95
    Kiste 3: Artikel 96 bis 124
    Kiste 4. Artikel 125 bis 160
    Kiste 5: Artikel 161 bis 189
    usw.

    Wie programmiert man am geschicktest eine Abfrage in welcher Kiste sich zum Beispiel Artikel 39 befindet? Eine geschachtelte Abfrage scheidet aus weil sich die Zuordnung vll. noch nachträglich ändern kann z.b. durch größere oder kleinere Kisten.


  • Administrator

    Orchy schrieb:

    Eine geschachtelte Abfrage scheidet aus weil sich die Zuordnung vll. noch nachträglich ändern kann z.b. durch größere oder kleinere Kisten.

    Was verstehst du hier unter "geschachtelte Abfrage"?

    Naja, wie auch immer. Wenn deine Daten so wunderschön sortiert sind, dann wäre eine binäre Suche vielleicht etwas. Zuerst über die Kisten, um herauszufinden, in welcher Kiste sich der Artikel befindet (grösser gleich dem Kleinsten und kleiner gleich dem Grössten), und danach in der Kiste selbst.

    Grüssli



  • Guten Morgen,

    Wie sieht denn Deine Datenstruktur aus?

    Hast Du ein Array aus mehreren dynamischen Array's?
    Ist eine doppelte Artikelnummer ABSOLUT ausgeschlossen?
    Sind die Artikel innerhalb Deiner Datenstruktur schon nach größe sortiert
    oder hat der index des jeweiligen Artikels eine Bedeutung?

    Also, wenn die Artikel in der jeweiligen Kiste sortiert sind, dann gleiche
    doch einfach nur den Anfangsartikel und den Endartikel innerhalb der Kiste ab,
    dann weißt Du schon einmal in welchen Kisten der gesuchte Artikel sich nicht
    befindet und im besten Fall in welchen dieser sich wahrscheinlich aufhalten müsste.

    grüße
    ------------------------
    edit:
    eine binäre suche wäre nur innerhalb einer Kiste, oder wenn man die
    anfangswerte und endwerte aller kisten in ein seperates array
    hinterlegt sinnvoll ?!


  • Administrator

    zeusosc schrieb:

    edit:
    eine binäre suche wäre nur innerhalb einer Kiste, oder wenn man die
    anfangswerte und endwerte aller kisten in ein seperates array
    hinterlegt sinnvoll ?!

    Wieso? Die Kisten liegen doch sicher auch in einer Liste. Alles was man dann braucht, ist ein Zugriff auf den ersten (tiefsten) und letzten (höchsten) Wert in der Kiste und du kannst auch eine binäre Suche über die Kisten laufen lassen.

    Grüssli



  • Um die Performance kann man sich kümmern sobald Kritisch ^^ (-> Profiler)

    Bis dahin kann man Linq die Arbeit machen lassen:

    //Pseudo
    class Demo
    {
    	public Demo()
    	{
    		// Fill _boxes somehow
    	}
    
    	private List<Box> _boxes;
    
    	public Article GetArticleById(int id)
    	{
    		return (from k in _boxes from a in k.Artikel where a.Id == id select a).FirstOrDefault();
    	}
    }
    
    public class Box
    {
    	public List<Article> Artikel { get; set; }
    }
    
    public class Article
    {
    	public int Id { get; private set; }
    }
    

Anmelden zum Antworten