myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie mache ich aus zwei Arrays ein multidimensionales Array?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie mache ich aus zwei Arrays ein multidimensionales Array?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
aloqqq
myCSharp.de-Mitglied

Dabei seit: 27.11.2020
Beiträge: 1


aloqqq ist offline

Wie mache ich aus zwei Arrays ein multidimensionales Array?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie mache ich aus zwei Arrays ein multidimensionales Array,

explizites Bsp.:

(1) (6)
(2) (6)
(3) (4)
(4), (9)

zu

(1 6)
(2 6)
(3 4)
(4 9)

beziehungsweise als Liste: (1,2,3,4) und (6,6,4,9) zu (1,6,2,6,3,4,4,9)

Danke

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von aloqqq am 27.11.2020 19:05.

27.11.2020 19:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.703
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sollte eigentlich einfach sein.
Wenn du sicherstellst, dass beide Listen/arrays gleich groß sind, ist das von der Programmierung her doch simpel.

1.Elemente in for Schleife durch laufen.
2.Zähler der SChleife als Index für die erste Dimension der Matrix nutzen.
3.Aktuelles Element aus der ersten Liste in die erste Posistion der aktuellen Dimension schreiben
3.Aktuelles Element aus der zweiten Liste in die zweite Posistion der aktuellen Dimension schreiben

Liese sich vermutlich mit 5 Zeilen mit einer for Schleife umsetzen.
Die Matrix muss in der ersten Dimension = Anzahl Elemente der Listen haben und als zweite Dimension dann fix 2 in der zweiten Dimension die beiden Zahlen hast.
Code kannst du gerne selbst mal versuchen.

Die Doku kann dir auch helfen bei den Arrays:
 Doku Arrays

T-Virus

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von T-Virus am 27.11.2020 20:17.

27.11.2020 19:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.681
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo aloqqq,

Zitat:
multidimensionales Array

Muss es ein multidimensionales Array sein?
"Jagged arrays" werden von der .NET Runtime besser unterstützt, falls Leistung ein Kriterium ist.

Auch bieten die jagged Arrays die Möglichkeit die Matrix als Tupel von Spaltenvektoren zu speichern -- du hast das Layout in der Hand. Für dein Beispiel wäre es dann einfach den Vektor in die jeweilige Spalte zu kopieren.

C#-Code:
int[] col0 = { 1, 2, 3, 4 };
int[] col1 = { 5, 6, 7, 8 };

int[][] matrix = new int[2][];
matrix[0]      = new int[col0.Length];
matrix[1]      = new int[col1.Length];

col0.CopyTo(matrix[0], 0);
col0.CopyTo(matrix[1], 0);

Es ist auch möglich die Matrix nur in einem (1d) Array zu speichern, so dass einfach Spaltenvektor and Spaltenvektor gehängt wird. Der Zugriff erfolgt dann via entsprechenden Indexer. Grob z.B. so

C#-Code (naive Matrix-Implementierung / C# 9 Top-level statements):
using System;

int[] col0 = { 1, 2, 3, 4 };
int[] col1 = { 5, 6, 7, 8 };

Matrix matrix = new(4, 2);
matrix.SetColumnVector(col0, 0);
matrix.SetColumnVector(col1, 1);
matrix.Print();

public class Matrix
{
    private readonly int[] _storage;
    private readonly int   _rows;
    private readonly int   _cols;

    public Matrix(int rows, int cols)
    {
        // Argumente sollten hier validiert werden, auch ist auf potentiellen Overflow
        // (durch die Multiplikation) zu achten!
        int size = rows * cols;
        _storage = new int[size];
        _rows    = rows;
        _cols    = cols;
    }

    // Wir verwenden ein "ref return", es wird also die Referenz zum Matrix-Element
    // zurückgegeben. Das erspart uns die Implementierung eines "setters".
    public ref int this[int i, int j]
    {
        get
        {
            if (i >= _rows) throw new ArgumentOutOfRangeException(nameof(i));
            if (j >= _cols) throw new ArgumentOutOfRangeException(nameof(j));

            // Matrix wird spaltenweise (als Tupel von Spaltenvektoren)
            // gespeichert
            int index = j * _rows + i;
            return ref _storage[index];
        }
    }

    public void SetColumnVector(int[] vector, int j)
    {
        if (vector.Length != _rows) throw new ArgumentException(/* ... */);

        int index = j * _rows;
        Array.Copy(vector, 0, _storage, index, vector.Length);
    }

    public void Print()
    {
        for (int i = 0; i < _rows; ++i)
        {
            for (int j = 0; j < _cols; ++j)
            {
                Console.Write($"{this[i, j]}\t");
            }
            Console.WriteLine();
        }
    }
}

mfG Gü
27.11.2020 21:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.01.2021 07:20