I have two List which I am accessing by index (e.g. Name[10]
, Date[10]
). They\'re closely tied, so Name[10]
is related to Date[1
you can use dictionary with Key Name , and value Date
and U can after that sort them easily
It sounds like you're fighting against doing the obvious solution which involves a little bit of upfront work: creating a type to encapsulate the name/date pair.
That's absolutely what you should do. Then you can have one list, sort it by name or by date or whatever you want, and you never need to worry about the two lists getting out of sync etc.
If your Results
class doesn't do anything apart from contain those two lists, you can actually end up with the same number of types - you can ditch Results
entirely, in favour of List<Result>
where Result
has a name and a date.
List<Tuple<string,DateTime> NameDateList {get; set; }
Is an easy way to accomplish what you want, but for clarity you are probably better off making a custom type to house them such as:
public class NameDate
{
public string Name { get; set; }
public DateTime Date{ get; set; }
}
Then you could use:
List<NameDate> NameDateList {get; set; }
Use the Array.Sort overload that takes an array of keys and an array of values, it does precisely what you want. (This method has been available since .NET 2.0.)
Create a class called "Result" with two properties
public class Result
{
public string Name {set;get;}
public DateTime Date { set;get;}
}
Now you may create a List of this class
List<Result> objListResult=new List<Result>();
Now in your case, If you want, you may read the content of your indidual List and put it to our new List. (This is only purticular to your case, if you really want to move data from your old Lists to our new List. If possible you may update the code where you load data to two List(that is the correct way) so that it will load data to our new List of Type Result and avoid this porting code to move data to new List.
for(int i=0;i<Name.Count;i++)
{
objListResult.Add(new Result { Name =Name[i].ToString(), Date[i].ToString() });
}
You can access the Items from the new List like this
objListResult[2].Date
will give you the Date Stored for the second object in the list
objListResult[2].Name
will give you the Name Stored for the second object in the list
Do yourself a favor and keep the two things together:
public class NameAndDate {
public string Name { get; set; }
public DateTime Date { get; set; }
}
Then you keep them in one list (List<NameAndDate>
):
If you want to sort by the name, add a IComparer
implementation to NameAndDate
, then you can just call Sort()
on the list.
If you want to keep access to the Name and the Date, add accessor methods to Results, like
public string GetName(int index) {
return list[i].Name;
}