2016-08-05 18 views
0

Also ich habe ein Array mit 4 Spalten. Und ich habe auch eine separate Liste, die jede Spalte mit einer Zeichenfolge definiert. So etwas wie das Snippet unten: -Wie Sie die Spalten in einem Array in C# neu anordnen?

List<string> headers = new List<string>(); 
headers.Add("Name"); 
headers.Add("Number"); 
headers.Add("ID"); 
headers.Add("License"); 

Das Array wie folgt aussieht

Max 32445 1 KPFG35 
Bill 33234 2 DGWEF9 
Ruth 89428 3 SFD3FG 

... und so weiter.

Jetzt sagen wir, jemand möchte das gleiche Array jedoch mit den Spalten als ID, Name, Number, License angeordnet. Wie kann ich die Spalten im Array manipulieren und eine neue erstellen, die zurückgegeben wird? Danke für jede Hilfe!

so in dem oben erwähnten Fall, wäre es

1 Max 32445 KPFG35 
2 Bill 33234 DGWEF9 
3 Ruth 89428 SFD3FG 
+0

Warum ein Array? – Uueerdo

+0

@Uueerdo Wenn es eine Lösung mit Listen gibt, kann ich damit arbeiten – sparta93

+1

Sie sollten diese Array-Daten zu einer benutzerdefinierten Klasse ziehen und können dann eine LINQ-Abfrage verwenden – Rahul

Antwort

2

Ich weiß nicht zurück, wenn Sie Liste oder nicht verwenden. Aber hier ist eine Lösung, die Ihnen helfen kann. Ich empfehle Ihnen, DataTable zu verwenden.

Im Prinzip habe ich ein Formular mit Datagridview erstellen und eine Schaltfläche,

DataTable dt = new DataTable(); 

In Form der Last,

private void Form1_Load(object sender, EventArgs e) 
    { 
     dt.Columns.Add("Name"); 
     dt.Columns.Add("Number"); 
     dt.Columns.Add("ID"); 
     dt.Columns.Add("License"); 
     string[] array = { "Max", "32445", "1", "KPFG35", "Bill", "33234", "2", "DGWEF9", "Ruth", "89428", "3", "SFD3FG" }; 

     for (int i = 0; i < array.Length + 1; i++) 
     { 

      if (i != 0 && i % 4 == 0) // every 4th item should be split from list 
      { 
       string[] tempArray = new string[4]; //temp array will keep every item until 4th one. 
       tempArray = array.Take(i).ToArray(); //Take until 4th item. 
       array = array.Skip(i).ToArray(); //then we don't need that items so we can skip them 
       dt.Rows.Add(tempArray); //Row is done. 
       i = -1; //Every skip will generate a new array so it should go back to 0. 

      } 
     } 
     dataGridView1.DataSource = dt; 

    } 

Und gibt es einen Knopf zu ändern, um mit SetOrdinal,

private void button1_Click(object sender, EventArgs e) 
     { 
      dt.Columns["ID"].SetOrdinal(0); 
      dataGridView1.DataSource = null; 
      dataGridView1.DataSource = dt; 
      dataGridView1.Refresh(); 

     } 

Ausgabe,

enter image description here

Nach Schaltfläche klicken ID-Spalte wurde auf 0 (den zweiten)

Hoffnung hilft, (nicht sicher, ob Sie List<string> verwenden, aber es könnte ein Anhaltspunkt für Sie sein.

0

Sie verschieben die Spalten nicht, sondern ordnen sie neu an. Shifting bedeutet, dass die Spalten in der gleichen Reihenfolge bleiben, die Zeile jedoch nach links oder rechts gedreht wird. Wie auch immer, es zu tun, ohne Datenstrukturen zu verwenden, sondern nur Arrays mit dem folgende Formular im Code würde:

//Assuming the array is of type string 
string[,] arr <--- the array we are talking about 
string[,] ta = new string[3,4]; //a temporary array 

/* The columns are arranged in the order: Name Number ID License 
    and we want it as: ------------  ID Name Number License 

    So, if the order of the columns is: 1 2 3 4, 
    we now want it as: --------------  3 1 2 4 */ 

string order = "3124"; 
for(int i=0; i<3; i++){ 
    for(int j=0; j<4; j++){ 
     int k = int.Parse(order[j].ToString())-1; 
       //k stores the column number in arr to be added to ta 
     ta[i,j] = arr[i,k]; 
    } 
} 

//ta now stores arr in the new order 
//you can either change the value of arr to the new array: arr = ta; 
//or you can now make all your references to the new array ta 

Hoffen, dass es Ihnen hilft.

0

Wie andere vorgeschlagen haben: Es wäre wahrscheinlich besser für Sie, diese als Objekte für Wartbarkeit zu speichern.

Aber es klingt wie Sie eine Anforderung haben, dass das Array ist, was Sie behalten möchten. Da alles, was Sie wirklich wollen, ist eine Spalte über Sie verschieben und eine neue Liste erzeugen Sie so etwas wie tun könnte:

private static IEnumerable<string> MoveIndexToFirst(List<string> input) 
{ 
    for(int i = 0; i < input.Count; i+=4) 
    { 
     yield return input[i+2]; 
     yield return input[i]; 
     yield return input[i+1]; 
     yield return input[i+3]; 
    } 
} 

Nutzung:

List<string> newList = MoveIndexToFirst(yourData).ToList();