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.
"Assimalyst" <(E-Mail Removed)> wrote in message
news:8c0f0921-c3a0-432f-a953-(E-Mail Removed)...
> 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/fid3768...71457A936.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