using System.Collections.Generic;
public static void Main()
List<Mahasiswa> listMhs = new List<Mahasiswa>();
listMhs.Add(new Mahasiswa(){Nilai = 95, Nama = "Mahasiswa A", Matakuliah = "Matakul 1"});
listMhs.Add(new Mahasiswa(){Nilai = 96, Nama = "Mahasiswa A", Matakuliah = "Matakul 2"});
listMhs.Add(new Mahasiswa(){Nilai = 97, Nama = "Mahasiswa A", Matakuliah = "Matakul 3"});
listMhs.Add(new Mahasiswa(){Nilai = 30, Nama = "Mahasiswa B", Matakuliah = "Matakul 1"});
listMhs.Add(new Mahasiswa(){Nilai = 20, Nama = "Mahasiswa B", Matakuliah = "Matakul 2"});
listMhs.Add(new Mahasiswa(){Nilai = 40, Nama = "Mahasiswa B", Matakuliah = "Matakul 3"});
listMhs.Add(new Mahasiswa(){Nilai = 84, Nama = "Mahasiswa C", Matakuliah = "Matakul 1"});
listMhs.Add(new Mahasiswa(){Nilai = 86, Nama = "Mahasiswa C", Matakuliah = "Matakul 2"});
listMhs.Add(new Mahasiswa(){Nilai = 85, Nama = "Mahasiswa C", Matakuliah = "Matakul 3"});
listMhs.Add(new Mahasiswa(){Nilai = 94, Nama = "Mahasiswa D", Matakuliah = "Matakul 1"});
listMhs.Add(new Mahasiswa(){Nilai = 93, Nama = "Mahasiswa D", Matakuliah = "Matakul 2"});
listMhs.Add(new Mahasiswa(){Nilai = 90, Nama = "Mahasiswa D", Matakuliah = "Matakul 3"});
listMhs.Add(new Mahasiswa(){Nilai = 60, Nama = "Mahasiswa E", Matakuliah = "Matakul 1"});
listMhs.Add(new Mahasiswa(){Nilai = 65, Nama = "Mahasiswa E", Matakuliah = "Matakul 2"});
listMhs.Add(new Mahasiswa(){Nilai = 67, Nama = "Mahasiswa E", Matakuliah = "Matakul 3"});
listMhs.Add(new Mahasiswa(){Nilai = 60, Nama = "Mahasiswa F", Matakuliah = "Matakul 1"});
listMhs.Add(new Mahasiswa(){Nilai = 60, Nama = "Mahasiswa F", Matakuliah = "Matakul 2"});
listMhs.Add(new Mahasiswa(){Nilai = 70, Nama = "Mahasiswa F", Matakuliah = "Matakul 3"});
listMhs.Add(new Mahasiswa(){Nilai = 100, Nama = "Mahasiswa G", Matakuliah = "Matakul 1"});
listMhs.Add(new Mahasiswa(){Nilai = 100, Nama = "Mahasiswa H", Matakuliah = "Matakul 1"});
Dictionary<string, long> dataMhs = new Dictionary<string, long>();
foreach (var m in listMhs)
if (dataMhs.Where(d => d.Key == m.Nama).Count() > 0)
dataMhs[m.Nama] += m.Nilai;
dataMhs.Add(m.Nama, m.Nilai);
foreach(KeyValuePair<string, long> n in dataMhs)
dataMhs[n.Key] = dataMhs[n.Key] / listMhs.Where(d => d.Nama == n.Key).Count();
dataMhs = dataMhs.OrderByDescending(d => d.Value).ToDictionary(d => d.Key, d => d.Value);
foreach(KeyValuePair<string, long> n in dataMhs)
Console.WriteLine(n.Key + " " + n.Value.ToString());
public int Nilai {get;set;}
public string Nama {get;set;}
public string Matakuliah {get;set;}