Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Languages / C# / November 2007

Tip: Looking for answers? Try searching our database.

Create Permutations from Dictionary<string, List<string>>

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Assimalyst - 30 Nov 2007 17:13 GMT
Hi

I have a Dictionary<string, List<string>>, which i have successfully
filled. My problem is I need to create a filter expression using all
possible permutations of its contents.

i.e. the dictionary essentially creates the following array:

Key           Value

Column1    1
Column1    2
Column2    17

I want to then create an number of filter expressions:

Column1 = 1 AND Column2 = 17
Column1 = 2 AND Column2 = 17

I used a permutation library i found PermuteUtils (
http://www.koders.com/csharp/fid3768925A9A54C7E9E853737EE8E638B71457A936.aspx
) and the following code:

Dictionary<string, List<string>> distinctCellValues = new
Dictionary<string, List<string>>();
ArrayList queryClause = new ArrayList();

{
foreach (KeyValuePair<string, List<string>> kvp in
distinctCellValues)
{
      foreach (string value in kvp.Value)
       {
             queryClause.Add(kvp.Key + " = " + value);
       }
}

//Convert array to string array
string[] queryClauseString = queryClause.ToArray(typeof(string)) as
string[];

CreateFilterPermutations<string>(queryClauseString,
distinctCellValues.Count);
}

private void CreateFilterPermutations<T>(IEnumerable<T> input, int
count)
{
     foreach (IEnumerable<T> permutation in
PermuteUtils.Permute<T>(input, count))
      {
          foreach (T i in permutation)
          {
              filterExpressions.Add(i);
          }
      }
}

This seems to work OK as far as running the CreateFilterPermutations
method, where i just cannot get it to do what i need.

I've manage to get myself very confused by all this, and this only
contains 2 columns. Potentially i could need to be generating
permutations of 10 columns/values or more!! I'm hoping someone can
straighten out my thoughts before my head explodes!!

Thanks
Fred Mellender - 30 Nov 2007 18:14 GMT
There is a good chance I don't understand your problem, but here is my take:

I don't think you want the permutations of the array elements, but instead
want a subset of the Cartesian product of the array with itself.  E.G. if
the array is A= [a, b, c], the Cartesian product A x A is
{(a,a), (a,b), (a,c), (b,a), (b,b), (b,c), (c,a), (c,b), (c,c)}.  The subset
you want excludes an element whose coords are the same, and considers as
duplicates 2 elements that have the same coords (e.g. (a,b) and (b,a) are
the same).

So, you want {(a,b), (a,c), (b,co)}

If you only have a single array, X, crossed only once with itself,
containing more than one element, some potential pseudo code would be:

for (int i = 0; i < x.Length-1; i++)
{
   for (int j = i+1; j < x.Length; j++)
       {
               myFilterList.Add(x[i].MyToString() + " AND " +
x[j].MyToString())
       }
}

In your case, x is the list of KeyValue pairs from the dictionary, and you
need to convert each KeyValue to a string via MyToString(), so as to form a
filter, which you add to a list, myFilterList.

What I don't understand about your example:
You have the same key, Column1 associated with two different values.  I
don't think the Dictionary allows this.

> Hi
>
[quoted text clipped - 63 lines]
>
> Thanks
Assimalyst - 30 Nov 2007 19:50 GMT
Thank you Fred.

I think i had confused myself. Not sure I want permutations but rather
combinations.

Your code sample has given me some ideas that i think i can get
working with a bit of expansion.
I'll keep playing with it . . .

By the way, i think you understood my problem exactly. The bit you
didn't understand was just the way i represented it. I didn't have
duplicate keys it was more like

Column1 { 1, 2 }
Column2 { 17 }

Thanks again

On Nov 30, 6:14 pm, "Fred Mellender" <nospamPlease_fred...@gmail.com>
wrote:
> There is a good chance I don't understand your problem, but here is my take:
>
[quoted text clipped - 96 lines]
>
> > Thanks

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.