-
May 26th, 2013, 10:05 PM
#1
linq on two string array
string[] listOne = new string[] { "dog", "cat", "car", "apple"};
string[] listTwo = new string[] { "car", "apple"};
What I need is to order listOne by the order of items in listTwo (if present). So the new list would be in this order; "car", "apple", "dog", "cat"
-
May 29th, 2013, 09:13 AM
#2
Re: linq on two string array
I don't know of a quick way to do it with Linq (probably because I don't use Linq terribly often, perhaps another member will know).
You can do it normally though, if you have a way to quickly test membership in both lists.
Code:
List<string> orderedResult = new List<string>();
for(int i = 0; i < listTwo.Length; i++)
if( isMember(listTwo[i], listOne) ) //If the i'th item in list2 is contained in list1
orderedResult.Add(listTwo[i]);
for(int i = 0; i < listOne.Length; i++)
if( !isMember(listOne[i], listTwo) ) //If the i'th item in list1 is NOT contained in list2
ordreredResult.Add(listOne[i]);
For short lists, it is probably sufficient to implement isMember as a loop. If you had longer lists, you'd probably want to construct a dictionary for each list:
Code:
Dictionary<string, int> listOneDict = new Dictionary<string, int>();
foreach(string s in listOne)
listOneDict.Add(s, 0);
And then test for membership:
Code:
listOneDict.ContainsKey("someStringToTest");
All of these snippets assume that listOne and listTwo have no repeated elements.
Anyway, I think that ought to work, but I didn't explicitly test it. Push back if you need more information. Hope that is a little helpful!
Best Regards,
BioPhysEngr
http://blog.biophysengr.net
--
All advice is offered in good faith only. You are ultimately responsible for effects of your programs and the integrity of the machines they run on.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|