valor una sort recorrer organizar ordenar lista las diccionario como claves buscar .net dictionary c#-3.0

.net - recorrer - ordenar una lista en python sin sort



Cómo ordenar un diccionario por clave (6)

Cargue el objeto sin clasificar en un objeto SortedDictionary de la siguiente manera:

SortedDictionary<string, string> sortedCustomerData = new SortedDictionary<string,string>(unsortedCustomerData);

Donde unsortedCustomerData es del mismo tipo genérico (cadena de diccionario, cadena o en su cadena de caso, punto). Clasificará automáticamente el nuevo objeto por clave

De acuerdo con msdn: SortedDictionary (IDictionary): Inicializa una nueva instancia de la clase SortedDictionary que contiene elementos copiados de IDictionary especificado y utiliza la implementación predeterminada de IComparer para el tipo de clave.

Tengo diccionario Dictionary<string, Point>

la clave es c1, c3, c2, t1,, t4, t2 Quiero ordenarlos para que sean c1, c2, c3, t1, t2, t3

Estoy tratando de ordenarlo usando

Input.OrderBy(key => key.Key );

pero no funciona

alguna idea de cómo resolver eso


El siguiente código usa dos listas más para ordenar un diccionario.

using System; using System.Collections.Generic; using System.Drawing; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Dictionary<string,Point> r=new Dictionary<string,Point>(); r.Add("c3",new Point(0,1)); r.Add("c1",new Point(1,2)); r.Add("t3",new Point(2,3)); r.Add("c4",new Point(3,4)); r.Add("c2",new Point(4,5)); r.Add("t1",new Point(5,6)); r.Add("t2",new Point(6,7)); // Create a list of keys List<string> zlk=new List<string>(r.Keys); // and then sort it. zlk.Sort(); List<Point> zlv=new List<Point>(); // Readd with the order. foreach(var item in zlk) { zlv.Add(r[item]); } r.Clear(); for(int i=0;i<zlk.Count;i++) { r[zlk[i]]=zlv[i]; } // test output foreach(var item in r.Keys) { Console.WriteLine(item+" "+r[item].X+" "+r[item].Y); } Console.ReadKey(true); } } }

El resultado del código anterior se muestra a continuación.

c1 1 2 c2 4 5 c3 0 1 c4 3 4 t1 5 6 t2 6 7 t3 2 3


Es solo una suposición, pero parece que estás asumiendo que va a ordenar Input. El método OrderBy realmente devuelve una instancia ordenada de un IOrderedEnumerable que contiene los mismos valores. Si desea mantener el valor de retorno, puede hacer lo siguiente:

IOrderedEnumerable orderedInput orderedInput = Input.OrderBy(key=>key.Key)

La mayoría de los métodos que modificarían la colección siguen este mismo patrón. Hace esto para que no cambie la instancia de colección original. Esto lo protege de cambiar accidentalmente la instancia cuando no tenía la intención de hacerlo. Si solo desea utilizar la instancia ordenada, simplemente configure la variable como el resultado del método anterior.


Ok, mira esto debería funcionar

var r = new Dictionary<string, Point>(); r.Add("c3", new Point(0, 0)); r.Add("c1", new Point(0, 0)); r.Add("t3", new Point(0, 0)); r.Add("c4", new Point(0, 0)); r.Add("c2", new Point(0, 0)); r.Add("t1", new Point(0, 0)); r.Add("t2", new Point(0, 0)); var l = r.OrderBy(key => key.Key); var dic = l.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value); foreach (var item in dic) { Console.WriteLine(item.Key); } Console.ReadLine();


solía

var l = Input.OrderBy(key => key.Key);

y lo convertí al Diccionario


Input.OrderBy no ordena el diccionario, sino que crea una consulta que devuelve los elementos en un orden ordenado.

Tal vez OrderedDictionary te da lo que quieres.

O usa el genérico SortedDictionary