Estoy buscando una manera fácil de ordenar NameValueCollection sobre la base de la clave; sin embargo, no debería ser un rendimiento pesado.¿Hay alguna manera fácil de ordenar NameValueCollection sobre la base de la clave en C#?
7
A
Respuesta
13
de inicio con SortedDictionary<string,string>
o SortedList<string,string>
y que está ya allí ...
Si necesita los artículos múltiples por tecla, y luego considerar un SortedDictionary<string,List<string>>
. Hay formas de simplificar la adición, etc. con los métodos de extensión; no es necesario que asuste.
Nótese también que NameValueCollection
entre mayúsculas y minúsculas, por lo que puede que tenga que utilizar una de las comparaciones insensibles - por ejemplo:
Dictionary<string,string> data = new Dictionary<string,string>(
StringComparer.InvariantCultureIgnoreCase);
(editar) he aquí un ejemplo de la utilización de un método de extensión para poblar múltiples valores en contra de una sola tecla en C# 3.0:
static void Main()
{
var data = new Dictionary<string, List<string>>(
StringComparer.InvariantCultureIgnoreCase);
data.Add("abc", "def");
data.Add("abc", "ghi");
}
static void Add<TKey, TValue>(this IDictionary<TKey, List<TValue>> lookup,
TKey key, TValue value)
{
List<TValue> list;
if (!lookup.TryGetValue(key, out list))
{
list = new List<TValue>();
lookup.Add(key, list);
}
list.Add(value);
}
2
Aquí un corte fuerza bruta que no estoy demasiado orgulloso, pero funciona si necesita algo rápido y sucio.
public static void Sort(this NameValueCollection nameValueCollection)
{
// Create a temporary collection the same size as the original
NameValueCollection tempNameValueCollection = new NameValueCollection(nameValueCollection.Count);
// Sort the keys
string[] keys = nameValueCollection.AllKeys;
Array.Sort(keys);
foreach (string key in keys)
{
// Sort the values
string[] values = nameValueCollection[key].Split(',');
Array.Sort(values);
// Add each value to the temporary collection
foreach (string value in values)
{
tempNameValueCollection.Add(key, value);
}
}
// Clear the original collection
nameValueCollection.Clear();
// Add the sorted entries back
nameValueCollection.Add(tempNameValueCollection);
}
Cuestiones relacionadas
- 1. en javascript, ¿hay alguna manera fácil de ordenar los pares clave-valor por el valor y devolver la clave?
- 2. ¿Cómo ordenar NameValueCollection usando una clave en C#?
- 3. ¿Hay alguna manera fácil de adjuntar una fuente en Eclipse?
- 4. ¿Hay alguna manera más fácil de enviar la tecla ENTRAR en la pantalla GNU?
- 5. ¿Existe alguna manera fácil de usar InternalsVisibleToAttribute?
- 6. ¿hay alguna manera fácil de exponer los métodos de la clase padre privada C++
- 7. ¿Hay alguna manera fácil de obtener sombras en OpenGL?
- 8. ¿Hay alguna manera fácil de obtener ServerName en Symfony?
- 9. ¿Hay alguna manera fácil de convertir Criteria a HQL?
- 10. ¿Hay alguna manera de clasificar/ordenar claves en objetos JavaScript?
- 11. ¿Hay alguna manera de ordenar cadenas en todos los idiomas?
- 12. ¿Hay alguna manera fácil de integrar jshint con netbeans?
- 13. ¿Hay alguna manera de prohibir la subclasificación de mi clase?
- 14. En .NET MVC, ¿hay alguna manera fácil de verificar si estoy en la página de inicio?
- 15. ¿Hay alguna manera fácil de borrar un formulario ASP.NET?
- 16. ¿Hay alguna manera fácil de obtener programáticamente el alfabeto?
- 17. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 18. ¿Hay alguna manera fácil de combinar dos valores System.Drawing.Color?
- 19. Comunicación entre aplicaciones C#: la manera fácil
- 20. ¿Hay alguna manera fácil de cambiar un carácter en una cadena en C#?
- 21. ¿Hay alguna manera de cambiar primero la cadena de conexión en la base de datos?
- 22. ¿Hay alguna manera de "reiniciar" la JVM?
- 23. ¿Hay alguna manera de iterar sobre un diccionario?
- 24. ¿Hay alguna manera fácil de extraer la corriente bruta h.264 en formato annexb?
- 25. ¿Hay alguna manera fácil de enviar dos columnas a la consola en Java?
- 26. ¿Hay alguna manera fácil de hacer un montón mínimo en C++?
- 27. jQuery encadenando padre(), ¿hay alguna manera más fácil?
- 28. ¿Hay alguna manera de utilizar la stringificación del preprocesador de C++ en argumentos de macro variados?
- 29. Automatice pimpl'ing de las clases de C++, ¿hay alguna manera fácil?
- 30. ¿Hay alguna manera de hacer que la unión de C# funcione de manera estática?