2012-09-28 5 views
2

Pouvez-vous conseiller une solution de comment trier IEnumerable<byte> indexes dans .NET 3.0 (pas LINQ)? Bien sûr, il est possible de déterminer indexes longueur, créer un tableau, copier élément par élément, puis appeler Array.Sort(array). Mais peut-être pouvez-vous suggérer autre chose?Commander IEnumerable sans LINQ

Répondre

6

Tant que vous n'utilisez pas le compilateur 2.0 (donc: VS 2008/2010/2012), vous pouvez utiliser LINQBridge, et utiliser LINQ-to-Objects à partir de votre code .NET 2.0/3.0.

L'autre solution est paresseux:

List<byte> list = new List<byte>(indexes); 
list.Sort(); 
// list is now a sorted clone of the data 
0

Puisque vous ne pouvez pas vraiment changer un IEnumerable, vous devrez copier les données ailleurs pour le trier.

Cependant, notez que vous triez les octets, vous pouvez utiliser Bucket Sort pour un tri ultra-efficace.

1

Ne pensez pas qu'il y ait une autre solution, puis itérer sur "manuellement", dans C# 2.0

Une autre option de création de tableau.

Vous pouvez créer un List<>

var list = new List<byte>(indexes); 
list.Sort(delegate(byte b1, byte b2) 
{ 
     //your comparison logic here 
}); 

Il est plus compact alors simple, for ou foreach itération sur la collecte.

1

L'intégralité du IEnumerable<> doit être lue lorsque vous le triez, donc il n'y a pas moyen de contourner cela. Même la méthode Linq to Objects Sort conserve la totalité de la collection en mémoire.

Créer un List<byte> du IEnumerable<byte> et le tri:

List<byte> list = new List<byte>(indexes); 
list.Sort();