Du bist nicht angemeldet.

Werbeanzeige

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 154

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

1

07.04.2021, 10:49

[C#] 2-dimensionales Array speichern

Hi,

ich suche eine möglichst performate Lösung für mein Problem.
Ich benötigt eine Möglichkeit, ein 2-dimensionals Array aus short-Werten zu speichern.

Dabei ist die Größe und die Start- und Endwerte der Keys nicht bekannt. (können auch negativ sein)
Genauer gesagt will ich eine 2D Tilemap speichern, die prozedual mit der Spieler-Bewegung generiert wird.

Das Ganze soll in C# (Unity) implementiert werden.


Ich hatte eine kleine Klasse gefunden, die das mit einem Dictionary macht, weis aber nicht wie performant das ist, wenn da einige tausend Werte drin gespeichert werden.
Hier die Klasse:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Matrix2D<T>
{    
    private Dictionary<string, T> Data = new Dictionary<string, T>();
    public T this[int x, int y]
    {
        get
        {
            string key = this.GetKey(x, y);
            return Data.ContainsKey(key) ? Data[key] : default(T);
        }
        set
        {
            string key = this.GetKey(x, y);
            if (value == null)
                Data.Remove(key);
            else
                Data[key] = value;
        }
    }

    private string GetKey(int x, int y)
    {
        return String.Join(",", new[] { x, y });
    }
}


Gibt es eine bessere Lösung?



Gruß

David Scherfgen

Administrator

Beiträge: 10 311

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

07.04.2021, 13:07

Also einen String als Key zu benutzen ist gar nicht gut. Wenn du schon ein Dictionary nutzt, dann baue die beiden int-Werte (x und y) doch einfach zu einem long zusammen, den du dann als Key benutzt: ((long)x << 32) | (long)y.
Probier es mal damit, und wenn es Performance-Probleme gibt (Profiler nutzen!), dann schauen wir weiter.

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 154

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

3

07.04.2021, 13:08

Hi,

stimmt, das ist eine gute Idee, darauf bin ich garnicht gekommen.
Ich probier es aus, vielen Dank



Gruß

Werbeanzeige