C# Unity Cómo imprimir un diccionario en orden
– UnityAssets3Free
hola , por aqui kein y en esta ocasion os traigo
esta unity pregunta
¿Cómo puedo hacer algo como esto?
` Accidente de helicóptero >
nombre del jugador | 10
nombre del jugador | 19
nombre del jugador | 23 etc `
Estoy almacenando el jugador y el daño causado en un diccionario, pero me resulta difícil sacar todo y luego imprimirlo en un mensaje e imprimir solo los 5 mejores jugadores que causaron el mayor daño. Código:
private void SendHeliMessage()
foreach (KeyValuePair<BasePlayer, int> hitInfo in HeliHits)
BasePlayer Player = hitInfo.Key;
int DamageDone = hitInfo.Value;
var players = HeliHits.Keys;
SendMessage(Player,$"this is a test, Heli Takedown >nn0
void SendMessage(BasePlayer player, string message, params object[] args)
PrintToChat(player, message, args);
(Sí, sé que lo que obtuve está mal, solo fui yo jugando y probando)
2 respuestas 2
Ordenar el diccionario por valor de mayor a menor podría ser algo como…
var sorted = HeliHits.OrderByDescending(key => key.Value);
Entonces, para revisar el diccionario y producir todos los pares clave-valor, podría verse algo como…
foreach (KeyValuePair<BasePlayer, int> hitInfo in sorted)
SendMessage(hitInfo.Key, $"this is a test, Heli Takedown >nn0
Si solo quisiera los 5 valores principales del diccionario, podría hacer algo como….
var sorted = HeliHits.OrderByDescending(key => key.Value).Take(5);
Perdón por no ver lo obvio inicialmente. Por diseño, un diccionario no está ordenado, pero, por supuesto, puede iterarlo de manera ordenada solicitando explícitamente una enumeración ordenada:
private void SendHeliMessage()
foreach (KeyValuePair<BasePlayer, int> hitInfo in HeliHits.OrderByDescending(x => x.Value)) // Get players with their score ordered from the best to the worst
1", null, 0, Player.displayName, string.Join("n", DamageDone));
Para recibir un solo mensaje:
private void SendHeliMessage()
StringBuilder result = new StringBuilder();
int rank = 1;
foreach (KeyValuePair<BasePlayer, int> hitInfo in HeliHits.OrderByDescending(x => x.Value)) // Get players with their score ordered from the best to the worst
BasePlayer Player = hitInfo.Key;
int DamageDone = hitInfo.Value;
var players = HeliHits.Keys;
result.Append($"Rank rank: Player Player.displayName with DamageDone points");
rank++;
SendMessage(Player, result.ToString(), null, 0, Player.displayName, string.Empty);
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
eso es todo,espero que te funcione