If at an interview I would certainly have failed. Took me far to long to implement the sort. Also I have no clue weather this is efficient or not - all I know is that it works ...
using System;
using System.Collections;
namespace user
{
class Program
{
static void Main(string[] args)
{
UserList uList new UserList();
for (int i 100; i > 0; i--)
uList.AddUser(new User(i "FName" "GName"));
Console.WriteLine(uList.GetUser(2).FamilyName);
foreach (User u in uList.GetOrderedUserArray())
Console.WriteLine("ID: {0} FName: {1} GName: {2}"
u.UserID
u.FamilyName
u.GivenName);
Console.ReadKey();
}
}
public class User : IComparable
{
public int UserID;
public string FamilyName;
public string GivenName;
// default (ascending) sort
int IComparable.CompareTo(Object obj)
{
User uid1 (User)this;
User uid2 (User)obj;
if (uid1.UserID < uid2.UserID) return 1;
if (uid1.UserID > uid2.UserID) return -1;
else return 0;
}
public User(int userID string familyName string givenName)
{
UserID userID;
FamilyName familyName;
GivenName givenName;
}
}
// do descending sort on UserID property.
public class sortUIdDescendingHelper : IComparer
{
int IComparer.Compare(Object a Object b)
{
User uid1 (User)a;
User uid2 (User)b;
if (uid1.UserID > uid2.UserID) return 1;
if (uid1.UserID < uid2.UserID) return -1;
else return 0;
}
}
// the class holding our new three methods
public class UserList
{
ArrayList userList new ArrayList();
public void AddUser(User user) { userList.Add(user); }
public User GetUser(int userID)
{
foreach (User u in userList)
if (u.UserID userID) return u;
return (User)userList[0];
}
public ArrayList GetOrderedUserArray()
{
IComparer myComparer new sortUIdDescendingHelper();
// userList.Sort() // default (descending) sort
userList.Sort(myComparer); // ascending sort
return userList;
}
}
}