permutation of array items
How do I go about getting a combination of an array of strings of count 2? Ie.
List<string> myString = {"a", "b", "c", "d", "f"};
A permutation would look like this:
ab
ac
ad
af
ba
bc
bd
bf
ca
cb
cd
cf
etc...
I have no idea how to begin this algorithm. If it helps, I'd rather do a loop than a recursion because in my actual implementation, I have to assign a value to the permuted items and compare each one to another and select the hi开发者_Python百科ghest.
Using Linq:
var result =
from a in myString
from b in myString
where a != b
select a + b;
Not using LINQ
List<string> myString = {"a", "b", "c", "d", "f"};
List<String> result = new List<String> ();
for (int i = 0; i < myString.Count; i++)
{
for (int j = 0; j < myString.Count; j++)
{
if (i == j)
continue;
result.Add(myString[i] + myString[j]);
}
}
Without LINQ, you can use a nested loop:
var permutations = new List<string>();
for(int i = 0; i < myString.Count; i++)
{
for(int j = 0; j < myString.Count; j++)
{
if(i == j)
continue;
var permutation = string.Format("{0}{1}", myString[i], myString[j]);
permutations.Add(permutation);
}
}
Complementing the previous answers:
string[] arreglo = new string[6];
arreglo[0] = "a";
arreglo[1] = "b";
arreglo[2] = "c";
arreglo[3] = "d";
arreglo[4] = "e";
arreglo[5] = "f";
var permutations = new List<string>();
for (int i = 0; i < arreglo.Length; i++)
{
for (int j = 0; j < arreglo.Length; j++)
{
for (int k = 0; k < arreglo.Length; k++)
{
for (int l = 0; l < arreglo.Length; l++)
{
for (int m = 0; m < arreglo.Length; m++)
{
for (int n = 0; n < arreglo.Length; n++)
{
if (i ==j ||j == k||i == k||k == l||i == l||j == l||i == m||j == m||k == m||l == m||i == n||j == n||k == n||l == n||m == n)
continue;
var permutation = string.Format("{0}{1}{2}{3}{4}{5}", arreglo[i], arreglo[j], arreglo[k], arreglo[l], arreglo[m],arreglo[n]);
permutations.Add(permutation);
}
}
}
}
}
}
foreach(var element in permutations)
{
Console.WriteLine(element);
}
Console.ReadLine();
精彩评论