C sharp - Como podria ordenar un arregla de manera ascendente comparando los valores de un fieldname

 
Vista:
sin imagen de perfil

Como podria ordenar un arregla de manera ascendente comparando los valores de un fieldname

Publicado por josselyn (2 intervenciones) el 14/06/2016 15:11:22
Buen dia !
Como podria ordenar un arregla de manera ascendente comparando los valores de un fieldname?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como podria ordenar un arregla de manera ascendente comparando los valores de un fieldname?

Publicado por Carlos (35 intervenciones) el 14/06/2016 17:42:29
La forma mas simple de hacerlo (si estas usando c# y .net > 2) seria crear una lista con tu arreglo y usar el método “Sort()”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//crea una lista con tu arreglo
//ten en cuenta que "object" en este caso es solo un ejemplo
//en tu caso sería el tipo de objeto que estés usando
 
List<object> list = new List<object>(myArray);
 
list.Sort(delegate (object ob1, object obj2) {
 
		//aqui solo usa el que necesites
 
 
	//este ordena descendiente
	return ob1.myField.CompareTo(obj2.MyField);
 
	//este ordena ascendente
	return ob2.myField.CompareTo(obj1.MyField);
});

Si no estas usando C#, pues tendrias que recorrer el arreglo e ir comparando los fields uno a uno y asi ir ordenando
con buscar en internet pot "Sorting Algorithms" o "algoritmos de ordenamiento" encontrasras un monton de formas de ordenar arreglos que podras usar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como podria ordenar un arregla de manera ascendente comparando los valores de un fieldname?

Publicado por josselyn (2 intervenciones) el 14/06/2016 18:46:36
Muchas gracias
Realize algo asi :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static bool Sort<T>(IList<T> ObjArray, string fieldname)
{
	foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
	{
		if (fieldname == propertyInfo.Name)
		{
			for (var i = 0; i < (ObjArray.Count - 1); i++)
				for (var j = 0; j < (ObjArray.Count - i - 1); j++)
				{
					IComparable comparable1 = (IComparable)ObjArray[j].GetType().GetProperty(fieldname).GetValue(ObjArray[j], null);
					IComparable comparable2 = (IComparable)ObjArray[j + 1].GetType().GetProperty(fieldname).GetValue(ObjArray[j + 1], null);
					if (comparable1.CompareTo(comparable2) > 0)
					{
						T temp = ObjArray[j];
						ObjArray[j] = ObjArray[j + 1];
						ObjArray[j + 1] = temp;
					}
				}
		}
	}
	return false;
}

Estaria bien ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 707
Oro
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Como podria ordenar un arregla de manera ascendente comparando los valores de un fieldname?

Publicado por Wilfredo Patricio Castillo (416 intervenciones) el 15/06/2016 03:45:42
Me tus datos en una lista y haces algo tan simple como esto:

oListaPersonas.Sort((p, q) => string.Compare(p.Apellido_Paterno, q.Apellido_Paterno));


Espero te sirva.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como podria ordenar un arregla de manera ascendente comparando los valores de un fieldname?

Publicado por Javier Lopez Vargas (21 intervenciones) el 25/06/2016 19:20:36
Lo puedes hacer de esta manera
1
2
3
4
5
6
7
8
9
10
Array.Sort(lista);
Console.WriteLine("El nombre menor es: "+lista[0]);
Array.Reverse(listaNumeros);
Console.WriteLine("El nombre mayor es: " + lista[0]);
Console.WriteLine();
for (int i = 0; i < 14;i++ )
{
	Console.WriteLine("La posicion es: "+i+"  "+lista[i]);
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar