Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort one list by another

I have 2 list objects, one is just a list of ints, the other is a list of objects but the objects has an ID property.

What i want to do is sort the list of objects by its ID in the same sort order as the list of ints.

Ive been playing around for a while now trying to get it working, so far no joy,

Here is what i have so far...

//************************** //*** Randomize the list *** //************************** if (Session["SearchResultsOrder"] != null) {     // save the session as a int list     List<int> IDList = new List<int>((List<int>)Session["SearchResultsOrder"]);     // the saved list session exists, make sure the list is orded by this     foreach(var i in IDList)     {         SearchData.ReturnedSearchedMembers.OrderBy(x => x.ID == i);     } } else {     // before any sorts randomize the results - this mixes it up a bit as before it would order the results by member registration date                             List<Member> RandomList = new List<Member>(SearchData.ReturnedSearchedMembers);     SearchData.ReturnedSearchedMembers = GloballyAvailableMethods.RandomizeGenericList<Member>(RandomList, RandomList.Count).ToList();      // save the order of these results so they can be restored back during postback     List<int> SearchResultsOrder = new List<int>();     SearchData.ReturnedSearchedMembers.ForEach(x => SearchResultsOrder.Add(x.ID));     Session["SearchResultsOrder"] = SearchResultsOrder; }    

The whole point of this is so when a user searches for members, initially they display in a random order, then if they click page 2, they remain in that order and the next 20 results display.

I have been reading about the ICompare i can use as a parameter in the Linq.OrderBy clause, but i can’t find any simple examples.

I’m hoping for an elegant, very simple LINQ style solution, well I can always hope.

Any help is most appreciated.

like image 708
JGilmartin Avatar asked Oct 15 '10 20:10

JGilmartin


People also ask

How do you sort two lists together in Python?

Approach : Zip the two lists. Create a new, sorted list based on the zip using sorted(). Using a list comprehension extract the first elements of each pair from the sorted, zipped list.


2 Answers

Another LINQ-approach:

 var orderedByIDList = from i in ids                         join o in objectsWithIDs                        on i equals o.ID                        select o; 
like image 144
Simon D. Avatar answered Oct 09 '22 13:10

Simon D.


One way of doing it:

List<int>  order = ....; List<Item> items = ....;  Dictionary<int,Item> d = items.ToDictionary(x => x.ID);  List<Item> ordered = order.Select(i => d[i]).ToList(); 
like image 25
Jimmy Avatar answered Oct 09 '22 14:10

Jimmy