我有一个子程序:
private static IEnumerable<IEnumerable<T>> permutations<T>(IEnumerable<T> source)
{
var c = source.Count();
if (c == 1)
yield return source;
else
for (int i = 0; i < c; i++)
foreach (var p in permutations(source.Take(i).Concat(source.Skip(i + 1))))
yield return source.Skip(i).Take(1).Concat(p);
}
然后如何在main函数中调用它?
static void Main(string[] args)
{
string input = "abcdefghijk";
IEnumerable<string> summary;
summary= permutations<string>(IEnumerable<string> input);// obviously wrong, but how??
}
答案 0 :(得分:3)
调用该函数很简单,您只需要:
permutations(input)
这将给你一个字符序列序列的结果。要将内部IEnumerable<char>
转换为字符串,请使用Select
。
summary = permutations(input).Select(chars => new string(chars.ToArray()));
答案 1 :(得分:0)
summary = permutations(input);
除非排列属于不同的类别。
答案 2 :(得分:0)
由于无法直接实例化IEnumerable
,必须传入实现此接口的类(一种流行的选择是使用List
来保存数据)
.NET框架将自动将字符串解释为字符数组(char[]
),它实现IEnumerable
(即IEnumerable<char>
)。这就是为什么你可以将你的字符串直接传递给方法,如下所示:
static void Main(string[] args)
{
string input = "abcdefghijk";
var summary = permutations(input);
}
上面的代码是更明确的正在发生的版本的简写,可以通过以下代码来描述,该代码具有显式匹配permutations
方法的签名的方法调用。
static void Main(string[] args)
{
string input = "abcdefghijk";
IEnumerable<char> inputArray = input.ToCharArray();
IEnumerable<IEnumerable<char>> summary = permutations(inputArray);
}
答案 3 :(得分:0)
您可以通过两种方式调用它:
permutations<char>(input);
或
permutations(input);
第二次调用使用编译器类型推断,因此您不必指定 T 。
然后:
foreach (var outerEnumerator in permutations(test))
{
foreach (var singleChar in outerEnumerator)
{
Console.WriteLine(singleChar);
}
}
带有明确类型和版本的版本很好的格式化(每个单词在单独的行中):
foreach (IEnumerable<char> outerEnumerator in permutations(test))
{
foreach (char singleChar in outerEnumerator)
{
Console.Write(singleChar);
}
Console.WriteLine();
}
现在我们知道要采取什么方法:
var test = "test";
foreach (IEnumerable<char> testPermutation in permutations(test))
{
var permutationString = new string(testPermutation.ToArray());
Console.WriteLine(permutationString);
}
答案 4 :(得分:-1)
最简单的方法是创建一个string
List<string> strArr = new List<string>();
strArr.Add("firstItem");
strArr.Add("secondItem");
strArr.Add("thirdItem");
IEnumerable<IEnumerable<string>> summary = permutations<string>(strArr);