2017-02-20 8 views
0

hallo i Arraylist verwenden und speichert einfache Objektarray, dass mein Beispielcode SchnipselArraylist mit Objekttyp

ArrayList rows = new ArrayList(); 

     object[] objs = new object[3]; 

     objs[0] = 1; 
     objs[1] = "dilip"; 
     objs[2] = 27; 
     rows.Add(objs); 

     objs = new object[3]; 

     objs[0] = 2; 
     objs[1] = "lucky"; 
     objs[2] = 42; 
     rows.Add(objs); 

     objs = new object[3]; 
     objs[0] = 3; 
     objs[1] = "user"; 
     objs[2] = 46; 
     rows.Add(objs); 
     objs = new object[3]; 
     objs[0] = 4; 
     objs[1] = "testing"; 
     objs[2] = 76; 
     rows.Add(objs); 
     objs = new object[3]; 
     objs[0] = 5; 
     objs[1] = "trying"; 
     objs[2] = 44; 
     rows.Add(objs); 

Wie ich asc oder desc Sortierung auf einem Index von Objekt zum Beispiel der Sortierung Namen anwenden kann, basierend auf Welcher Index 1 oder Sortierung basierend auf Alter welcher Index 2 ..

Bitte geben Sie einen Vorschlag. Danke ..

+0

Warum sollte jemand nicht generische 'ArrayList' von nicht typisierten' object [] 'verwenden. Es macht Ihren Code schwierig, unlesbar und fehleranfällig bei verschiedenen Problemen, beginnend mit 'InvalidCastExceptions' bis hin zum Boxing/Unboxing Performance Overhead. Verwenden Sie stattdessen typisierte Arrays von Strukturen. –

+0

Ich weiß, aber sein bestehendes Projekt und neue Tischler können daher Designänderungen nicht vorschlagen. mit bestehendem Design gibt es einen Weg? Danke – Dilip

+0

@Dilip werfen Sie einen Blick auf die Antwort mit 'List ' gibt es einen Grund, warum Sie es nicht anstelle von 'ArrayList' verwenden können? – Svek

Antwort

0

Sie müssen comparer haben Ihre Arraylist zu sortieren. In Ihrem Fall wäre es etwa so aussehen:

public class MyComparer : IComparer 
{ 
    int IComparer.Compare(Object x, Object y) 
    { 
     int sortingIndex = 1; 

     var xUnbox = x as object[]; 
     var yUnbox = y as object[]; 

     return ((new CaseInsensitiveComparer()).Compare(yUnbox[sortingIndex], xUnbox[sortingIndex])); 
    } 
} 

diese haben, können Sie jetzt sortieren Sie Ihre Arraylist:

var comparer = new MyComparer(); 
rows.Sort(comparer); 

foreach (object[] line in rows) 
{ 
    Console.WriteLine(line[1]); 
} 

Dieses Beispiel würde sortieren Sie Ihre Arraylist von Index 1.

Obwohl ich Ich würde wärmstens empfehlen stark typisierte Sammlung zu verwenden, wie List<YourType>, denn dann könnte man nur Linq bestellen.

1

Die meisten LINQ-Methoden funktionieren mit einer stark typisierten IEnumerable<T> Schnittstelle.

Verwenden OfType Verfahren wie dies rows.OfType<object[]>().OrderBy(x => x[1])

Obwohl die Art und Weise nähern Sie Ihre Datenstrukturen werden schnell den Code wartbaren machen. Sie sollten in Erwägung ziehen, Klassen zu verwenden, um Ihre Daten widerzuspiegeln.

0

Gibt es einen Grund, warum Sie List<object[]> anstelle von ArrayList nicht verwenden könnten?

Zum Beispiel:

List<object[]> rows = new List<object[]>(); 

object[] objs = new object[3]; 

objs[0] = 1; 
objs[1] = "dilip"; 
objs[2] = 27; 
rows.Add(objs); 

var query = rows.Where(r => (string)r[1] == "dilip"); 

Sie dann alle Ihre verschiedenen Sortier tun könnte, usw.

var query = rows 
    .OrderBy(r => (int)r[0]) 
    .OrderBy(r => (string)r[1]) 
    .OrderByDescending(r => (int)r[2]);