Struttura dati per griglia con indici negativi

3

Scusa se questo è un concetto insultante e ovvio, ma è qualcosa che non ho mai fatto prima e non sono stato in grado di trovare alcun materiale che discute il modo migliore per affrontarlo.

Mi chiedo quale sia la migliore struttura dati per contenere una griglia 2D di dimensioni sconosciute. La griglia ha coordinate intere (x, y) e avrà indici negativi in entrambe le direzioni.

Quindi, qual è il modo migliore per tenere questa griglia? Attualmente sto programmando in c #, quindi non posso avere indici di array negativi. Il mio pensiero iniziale era di avere una classe con 4 matrici separate per (+ x, + y), (+ x, -y), (- x, + y) e (-x, -y). Questo sembra essere un modo valido per implementare la griglia, ma sembra che io stia sovra-ingegnerizzando la soluzione e il ridimensionamento dell'array sarà un problema.

Un'altra idea era quella di tenere traccia del punto centrale dell'array e impostarlo come topologico (0,0), ma avrei il problema di dover passare a ogni elemento della griglia quando aggiungo ripetutamente in alto a sinistra della griglia, che sarebbe simile al ridimensionamento della griglia, anche se con ogni probabilità più frequente.

Pensieri?

    
posta The Secret Imbecile 28.05.2014 - 00:38
fonte

2 risposte

3

Scrivi una nuova struttura dati con un indicizzatore che indirizzi gli indici negativi in un elenco diverso.

public class PositiveNegativeList<T>
{
    List<T> PositiveList;
    List<T> NegativeList;

    public PositiveNegativeList()
    {
         PositiveList = new List<T>();
         NegativeList = new List<T>();
    }

    public T this[int index]
    {
        get
        {
            if (index < 0)
               return NegativeList[index * -1];
            else
               return PositiveList[index];
        }

        set
        {
            if (index < 0)
               NegativeList[index * -1] = value;
            else
               PositiveList[index] = value;
        }
    }

    public void Add(T item)
    {
        PositiveList.Add(item);
    }
}

Codice ora testato . Nota che nulla è mai così semplice come dovrebbe essere; avrai bisogno di un metodo Add() di qualche tipo per ottenere nuovi elementi negli elenchi.

    
risposta data 28.05.2014 - 01:02
fonte
1

Inizi partendo dal presupposto che tu sappia come creare una griglia con gli indici X% da% da% a 0 e Y indici% da% da% a xmax .

Se i limiti dei tuoi indici sono da 0 a ymax e da xlower a xupper , devi quindi mappare gli indici in questo intervallo agli indici nel primo intervallo.

Se gli indici nel primo intervallo sono ylower e yupper , e gli indici nel secondo intervallo sono x1 e y1 , quindi:

x1 = x2 - xlower;
y1 = y2 - ylower;

Ora hai indici che possono essere utilizzati in una griglia regolare.

Sembra così semplice, mi chiedo se mi sono perso alcuni dettagli importanti.

    
risposta data 28.05.2014 - 08:08
fonte

Leggi altre domande sui tag