using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
class Employee
{
public Employee(string name, string id, int salary, string department)
{
Name = name;
Id = id;
Salary = salary;
Department = department;
}
public string Name { get; private set; }
public string Id { get; private set; }
public int Salary { get; private set; }
public string Department { get; private set; }
public override string ToString()
{
return String.Format("{0, -25}\t{1}\t{2}", Name, Id, Salary);
}
}
private static void Main(string[] args)
{
var employees = new List<Employee>
{
new Employee("Tyler Bennett", "E10297", 32000, "D101"),
new Employee("John Rappl", "E21437", 47000, "D050"),
new Employee("George Woltman", "E21437", 53500, "D101"),
new Employee("Adam Smith", "E21437", 18000, "D202"),
new Employee("Claire Buckman", "E39876", 27800, "D202"),
new Employee("David McClellan", "E04242", 41500, "D101"),
new Employee("Rich Holcomb", "E01234", 49500, "D202"),
new Employee("Nathan Adams", "E41298", 21900, "D050"),
new Employee("Richard Potter", "E43128", 15900, "D101"),
new Employee("David Motsinger", "E27002", 19250, "D202"),
new Employee("Tim Sampair", "E03033", 27000, "D101"),
new Employee("Kim Arlich", "E10001", 57000, "D190"),
new Employee("Timothy Grove", "E16398", 29900, "D190")
};
DisplayTopNPerDepartment(employees, 2);
}
static void DisplayTopNPerDepartment(IEnumerable<Employee> employees, int n)
{
var topSalariesByDepartment =
from employee in employees
group employee by employee.Department
into g
select new
{
Department = g.Key,
TopEmployeesBySalary = g.OrderByDescending(e => e.Salary).Take(n)
};
foreach (var x in topSalariesByDepartment)
{
Console.WriteLine("Department: " + x.Department);
foreach (var employee in x.TopEmployeesBySalary)
Console.WriteLine(employee);
Console.WriteLine("----------------------------");
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CiAKcHVibGljIGNsYXNzIFByb2dyYW0KewoJY2xhc3MgRW1wbG95ZWUKCXsKCQlwdWJsaWMgRW1wbG95ZWUoc3RyaW5nIG5hbWUsIHN0cmluZyBpZCwgaW50IHNhbGFyeSwgc3RyaW5nIGRlcGFydG1lbnQpCgkJewoJCQlOYW1lID0gbmFtZTsKCQkJSWQgPSBpZDsKCQkJU2FsYXJ5ID0gc2FsYXJ5OwoJCQlEZXBhcnRtZW50ID0gZGVwYXJ0bWVudDsKCQl9CiAKCQlwdWJsaWMgc3RyaW5nIE5hbWUgeyBnZXQ7IHByaXZhdGUgc2V0OyB9CgkJcHVibGljIHN0cmluZyBJZCB7IGdldDsgcHJpdmF0ZSBzZXQ7IH0KCQlwdWJsaWMgaW50IFNhbGFyeSB7IGdldDsgcHJpdmF0ZSBzZXQ7IH0KCQlwdWJsaWMgc3RyaW5nIERlcGFydG1lbnQgeyBnZXQ7IHByaXZhdGUgc2V0OyB9CiAKCQlwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkKCQl7CgkJCXJldHVybiBTdHJpbmcuRm9ybWF0KCJ7MCwgLTI1fVx0ezF9XHR7Mn0iLCBOYW1lLCBJZCwgU2FsYXJ5KTsKCQl9Cgl9CiAKCXByaXZhdGUgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQoJewoJCXZhciBlbXBsb3llZXMgPSBuZXcgTGlzdDxFbXBsb3llZT4KCQkJICAgICAgICAgICAgewoJCQkJICAgICAgICAgICAgbmV3IEVtcGxveWVlKCJUeWxlciBCZW5uZXR0IiwgIkUxMDI5NyIsIDMyMDAwLCAiRDEwMSIpLAoJCQkJICAgICAgICAgICAgbmV3IEVtcGxveWVlKCJKb2huIFJhcHBsIiwgIkUyMTQzNyIsIDQ3MDAwLCAiRDA1MCIpLAoJCQkJICAgICAgICAgICAgbmV3IEVtcGxveWVlKCJHZW9yZ2UgV29sdG1hbiIsICJFMjE0MzciLCA1MzUwMCwgIkQxMDEiKSwKCQkJCSAgICAgICAgICAgIG5ldyBFbXBsb3llZSgiQWRhbSBTbWl0aCIsICJFMjE0MzciLCAxODAwMCwgIkQyMDIiKSwKCQkJCSAgICAgICAgICAgIG5ldyBFbXBsb3llZSgiQ2xhaXJlIEJ1Y2ttYW4iLCAiRTM5ODc2IiwgMjc4MDAsICJEMjAyIiksCgkJCQkgICAgICAgICAgICBuZXcgRW1wbG95ZWUoIkRhdmlkIE1jQ2xlbGxhbiIsICJFMDQyNDIiLCA0MTUwMCwgIkQxMDEiKSwKCQkJCSAgICAgICAgICAgIG5ldyBFbXBsb3llZSgiUmljaCBIb2xjb21iIiwgIkUwMTIzNCIsIDQ5NTAwLCAiRDIwMiIpLAoJCQkJICAgICAgICAgICAgbmV3IEVtcGxveWVlKCJOYXRoYW4gQWRhbXMiLCAiRTQxMjk4IiwgMjE5MDAsICJEMDUwIiksCgkJCQkgICAgICAgICAgICBuZXcgRW1wbG95ZWUoIlJpY2hhcmQgUG90dGVyIiwgIkU0MzEyOCIsIDE1OTAwLCAiRDEwMSIpLAoJCQkJICAgICAgICAgICAgbmV3IEVtcGxveWVlKCJEYXZpZCBNb3RzaW5nZXIiLCAiRTI3MDAyIiwgMTkyNTAsICJEMjAyIiksCgkJCQkgICAgICAgICAgICBuZXcgRW1wbG95ZWUoIlRpbSBTYW1wYWlyIiwgIkUwMzAzMyIsIDI3MDAwLCAiRDEwMSIpLAoJCQkJICAgICAgICAgICAgbmV3IEVtcGxveWVlKCJLaW0gQXJsaWNoIiwgIkUxMDAwMSIsIDU3MDAwLCAiRDE5MCIpLAoJCQkJICAgICAgICAgICAgbmV3IEVtcGxveWVlKCJUaW1vdGh5IEdyb3ZlIiwgIkUxNjM5OCIsIDI5OTAwLCAiRDE5MCIpCgkJCSAgICAgICAgICAgIH07CiAKCQlEaXNwbGF5VG9wTlBlckRlcGFydG1lbnQoZW1wbG95ZWVzLCAyKTsKCX0KIAoJc3RhdGljIHZvaWQgRGlzcGxheVRvcE5QZXJEZXBhcnRtZW50KElFbnVtZXJhYmxlPEVtcGxveWVlPiBlbXBsb3llZXMsIGludCBuKQoJewoJCXZhciB0b3BTYWxhcmllc0J5RGVwYXJ0bWVudCA9CgkJCWZyb20gZW1wbG95ZWUgaW4gZW1wbG95ZWVzCgkJCWdyb3VwIGVtcGxveWVlIGJ5IGVtcGxveWVlLkRlcGFydG1lbnQKCQkJaW50byBnCgkJCXNlbGVjdCBuZXcKCQkJCSAgICB7CgkJCQkJICAgIERlcGFydG1lbnQgPSBnLktleSwKCQkJCQkgICAgVG9wRW1wbG95ZWVzQnlTYWxhcnkgPSBnLk9yZGVyQnlEZXNjZW5kaW5nKGUgPT4gZS5TYWxhcnkpLlRha2UobikKCQkJCSAgICB9OwogCgkJZm9yZWFjaCAodmFyIHggaW4gdG9wU2FsYXJpZXNCeURlcGFydG1lbnQpCgkJewoJCQlDb25zb2xlLldyaXRlTGluZSgiRGVwYXJ0bWVudDogIiArIHguRGVwYXJ0bWVudCk7CgkJCWZvcmVhY2ggKHZhciBlbXBsb3llZSBpbiB4LlRvcEVtcGxveWVlc0J5U2FsYXJ5KQoJCQkJQ29uc29sZS5Xcml0ZUxpbmUoZW1wbG95ZWUpOwoJCQlDb25zb2xlLldyaXRlTGluZSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwoJCX0KCX0KfQ==