grade_report.cs en C#
Un libro de calificaciones en un archivo: promedios, letras y una tabla resumen.
// grade_report: promedios por estudiante, nota con letra y resumen del curso
var scores = new Dictionary<string, int[]>
{
["Ada"] = new[] { 92, 88, 95 },
["Alan"] = new[] { 78, 85, 80 },
["Grace"] = new[] { 90, 91, 86 },
["Edsger"] = new[] { 70, 65, 74 },
};
string Letter(double avg) => avg switch
{
>= 90 => "A", >= 80 => "B", >= 70 => "C", _ => "F",
};
var averages = scores
.Select(pair => (Name: pair.Key, Avg: pair.Value.Average()))
.OrderByDescending(s => s.Avg)
.ToList();
Console.WriteLine("student avg grade");
foreach (var (name, avg) in averages)
{
Console.WriteLine($"{name,-9} {avg,5:F1} {Letter(avg)}");
}
var classAvg = averages.Average(s => s.Avg);
Console.WriteLine($"\nclass average {classAvg:F1}");
Console.WriteLine($"top student {averages[0].Name}");
Cómo funciona
- Un diccionario de arreglos de puntajes es todo el modelo de datos.
- La función local
Lettermapea promedios a través de una expresión switch. - LINQ ordena a los estudiantes; los huecos de alineación formatean la tabla.
Palabras clave y builtins usados aquí
doubleforeachinintnewstringswitchvar
El intento, en números
- Líneas
- 28
- Caracteres a escribir
- 784
- Tokens
- 195
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 123 segundos.
Paso 2 de 2 en Bis; paso 29 de 29 en Fundamentos del lenguaje.