2010-03-23 6 views
1

Je veux trier tableau A en fonction des valeurs dans le tableau BProblème de tri par date dans multi array?

fait en Array AI ont des sujets tels que

keyboard 
Laptop 
Desktop 
mouse 

et tableau B Mes dates sont associées à chaque valeur de tableau A comment je peux J'y pensais ... Je pensais utiliser multi array mais je ne sais pas s'il y a une méthode par défaut pour trier les multi array ... ou s'il y a une autre méthode pour y arriver?

Répondre

3

Utilisation:

Array.Sort (A, B, comparer); // comparer can be null here to use the default 

où A est le DateTime [] et B est la chaîne [] avec A [0] étant la date qui correspond à la chaîne B [0] et ainsi de suite. (Docs MSDN here)

+0

merci Gonzalo pour votre réponse ... donc mon tableau final serait tableau B basé sur la matrice triée Un rite? et la fonction de nivellement, puis-je utiliser le même comparateur défini dans le doc msdn ...? –

+0

Chaque fois qu'une clé du tableau A est déplacée, la valeur correspondante dans B sera déplacée vers la même position d'index. Pour DateTime, vous pouvez utiliser 'null' comme comparateur. – Gonzalo

+0

Merci Gonzalo pour votre aide .... –

0

Créez un objet avec deux propriétés: une chaîne pour votre sujet et un datetime pour vos dates. Placez ces objets dans un tableau ou une collection et vous pourrez ensuite trier la date et choisir de projeter un tableau de vos sujets si vous le désirez.

0

Si vous gérez cela complètement, vous pouvez les mettre en une seule classe:

class HardwareElement 
{ 
    public HardwareElement(string topic, DateTime date) 
    { 
     this.Topic = topic; 
     this.Date = date; 
    } 
    public string Topic { get; set; } 
    public DateTime Date { get; set; } 
} 

Ensuite, étant donné un tableau de ce qui précède, vous pouvez trier ces facilement:

HardwareElement[] theArray = PopulateMyArray(); 

Array.Sort(theArray, (l, r) => l.Date.CompareTo(r.Date)); 
0

Sauf si vous avez une raison spécifique, vous ne devriez probablement pas stocker deux données associées dans des tableaux complètement séparés.

vous pourriez peut-être essayer quelque chose comme ce qui suit:

public enum Device 
{ 
    Laptop, 
    Mouse, 
    Keyboard 
} 

public struct DeviceEvent 
{ 
    public DeviceEvent(Device device, DateTime timestamp) : this() 
    { 
     Device = device; 
     TimeStamp = timestamp; 
    } 
    public Device Device { get; set; } 
    public DateTime TimeStamp { get; set; } 
} 


List<DeviceEvent> deviceEvents = new List<DeviceEvent>(); 
deviceEvents.Add(new DeviceEvent(Device.Keyboard, DateTime.Now); 
deviceEvents.Add(new DeviceEvent(Device.Mouse, DateTime.Today); 
... etc 

IEnumerable<DeviceEvent> orderedDeviceEvents = deviceEvents.OrderBy(e = > e.TimeStamp);