Jump to content
Unity Insider Forum

Spalten einer Liste unabhängig voneinander sortieren


Noob

Recommended Posts

Hallo zusammen,

leider komme ich gerade nicht weiter.

Ich habe 6 Variablen in einer Liste mit jeweils ca. 1500 Werten.

Eine Spalte steht dabei für eine Variable.

Jetzt würde ich gerne die Werte der Variablen unabhängig von einander sortieren. Als Beispiel:

liste.tif

Zahlen können durchaus öfters vorkommen. Die Daten liegen als float bereit.

Danke!

 

liste.tif

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb Noob:

Ich habe 6 Variablen in einer Liste mit jeweils ca. 1500 Werten.

Das ist verdammt verwirrend. Heißt das, dass du eine Liste hast, die sechs Listen enthält, die ihrerseits wieder 1500 Elemente hat?

In jedem Fall klingt das nach einer Liste von Listen, und diese enthaltenen Listen kannst du ganz normal sortieren lassen. Oder verstehe ich dich da falsch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

sorry für dich Verwirrung. Im Endeffekt schaut meine Liste aus wie in liste.tif. Nur halt, dass ich X,Y,Z,A,B,C als Spalten habe. Jede dieser Spalten soll dann mit 1000 Werten gefüllt werden.

Was ich generell vorhabe:

Ich möchte von einem Sensor 3 rotatorische Freiheitsgrade (A,B,C) und 3 translatorische Freiheitgrade (X,Y,Z) auslesen und diese fortlaufend in einer Liste speichern. Anschließend sollen die Werte jeweils aufsteigend sortiert werden. Also alle Werte von A aufsteigend, alle von B aufsteigend, alle von C aufsteigend...

Konkret mal ein Beispiel:

X | Y | Z | A | B | C

3 | 1 | 4 | 10 | 27 | 20

5 | 2 | 7 | 13 | 90 | 30

...

Dabei ist meine Auffassung, dass dann meine Liste 6 Spalten und 2 Zeilen (den Kopf zähle ich nicht mit) hat. Oder habe ich ein falsches Verständnis von Listen in c#?

Über eine Klasse kann ich ja eine Liste mit mehreren Parametern füllen:

public class Entity : IComparable<Entity>
{
    public float[] value = new float[6];
    
    
    
    public Entity(float newValueX, float newValueY, float newValueZ, float newValueA, float newValueB, float newValueC)
    {

       
        value[0] = newValueX;
        value[1] = newValueY;
        value[2] = newValueZ;
        value[3] = newValueA;
        value[4] = newValueB;
        value[5] = newValueC;

    }
  //Hier müsste dann Methode zum Sortieren stehen
  public int CompareTo(Entity other)

Mein Problem ist jetzt nur, dass ich nicht weiß wie die Comparsion aussehen muss, bzw. ob ich überhaupt die Spalten einer Liste unabhängig sortieren kann. Oder wäre es sinnvoll für jede einzelne Variable, als X,Y,Z, A,B,C eine eigene Liste zu generieren?

 

Füllen würde ich sie dann so:

void Listenfüller()
    {
        
            // So oft ausführen bis 2 Werte aufgenommen wurden
            while (i < 2)
            {
                //liste.Add(new Entity(getVar2.X2, getVar2.Y2, getVar2.Z2, getVar2.A2, getVar2.B2, getVar2.C2));
                // Hier als Beispiel mit 2 Einträgen
                liste.Add(new Entity(7.7f, 4f, 9.9f, 10.0f, 11.1f, 12.2f));
                liste.Add(new Entity(1.1f, 5.5f, 3.3f, 4.4f, 2.2f, 6.6f));
                
                 i++;
                return;
           }
  	    // Hier sollte die dann Liste sortiert werden
            liste.Sort();
     }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Sascha:

Ja.

Ok Danke.

Ich habs jetzt mal in einzelne Listen geschrieben. Allerdings ergibt das viele Wiederholungen die ich mir gerne ersparen würde:

for ( int i = 0; i < 1000; i++)
        {
            listeX.Add(getVar2.X2);
            listeY.Add(getVar2.Y2);
            listeZ.Add(getVar2.Z2);
            listeA.Add(getVar2.A2);
            listeB.Add(getVar2.B2);
            listeC.Add(getVar2.C2);
        }
         
            // Listen sortieren

            listeX.Sort();
            listeY.Sort();
            listeZ.Sort();
            listeA.Sort();
            listeB.Sort();
            listeC.Sort(); 

Da kommen noch etliche Aktionen die ich mit den Listen machen will.

Ich habs mal, naiverweise, mit

List<float[]> liste = new List<float[]>();

versucht und dann unten

liste[j].Add(wert)...

allerdings gibts Add nicht bei einem Array.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Lösung am Ende verfolgt die richtige Idee. Du kannst lauter Arrays oder Listen in ein Array oder eine Liste stopfen. Arrays sind dabei bei festen Größen sinnvoll, Listen, wenn die Anzahl der enthaltenen Elemente sich zur Laufzeit ändern kann.

Eine Liste von Listen sieht dann so aus:

List<List<float>> lists = new List<List<float>>();

Eine neue Liste kannst du dann so in die Liste einfügen:

lists.Add(new List<float>());

und ein neues Element in die n-te Liste so:

list[n].Add(item);

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...