En este momento estás viendo C# Unity Cómo imprimir un diccionario en orden

 – Unity

C# Unity Cómo imprimir un diccionario en orden – Unity

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

Deja una respuesta