static void Main(string[] args) { string str = "a*b*c"; foreach (var t in GetList(str, new List<string>() { "1", "2", "3" })) Console.WriteLine(t); Console.ReadLine(); } static IEnumerable<string> GetList(string str, List<string> list) { if (str.Contains("*")) foreach (var t in list) { foreach (var tt in GetList(Regex.Replace(str, @"\*(.*$)", t + "$1"), list)) yield return tt; } else yield return str; }
char[] replaceData = new char[] { '1', '2', '3' }; List<char[]> replaceChar = new List<char[]>(); for (int m = 0; m < replaceData.Length; m++) { for (int n = 0; n < replaceData.Length; n++) { char[] data = new char[2]; data[0] = replaceData[m]; data[1] = replaceData[n]; replaceChar.Add(data); } }string source = "a*b*c"; string[] sourceSplit = source.Split(new char[] { '*' }); char[] sourceChar = source.ToArray(); List<string> result = new List<string>(); foreach (char[] replace in replaceChar) { string data = sourceSplit[0]; for (int c = 0; c < replace.Length; c++) { data += replace[c]; data += sourceSplit[c + 1]; } result.Add(data); }
只要2行。foreach (string i in "123".SelectMany(x => "123".Select(y => string.Format("a{0}b{1}c", x, y)))) Console.WriteLine(i);a1b1c a1b2c a1b3c a2b1c a2b2c a2b3c a3b1c a3b2c a3b3c Press any key to continue . . .
本帖最后由 caozhy 于 2013-02-07 15:56:42 编辑
基本想通一点,当"123".SelectMany选取到值时,把值作为参数x执行函数一 第一个 =>后面。函数一:当"123".Select选取到值时,把值作为参数y,与函数出入参数x一起作为参数执行函数二 第二个 =>后面。函数二:用x,y格式化字符串。最后SelectMany是得到一个字符串序列。foreach(string i in 字符串序列) 执行打印。
{
string str = "a*b*c";
foreach (var t in GetList(str, new List<string>() { "1", "2", "3" }))
Console.WriteLine(t);
Console.ReadLine();
}
static IEnumerable<string> GetList(string str, List<string> list)
{
if (str.Contains("*"))
foreach (var t in list)
{
foreach (var tt in GetList(Regex.Replace(str, @"\*(.*$)", t + "$1"), list))
yield return tt;
}
else yield return str;
}
List<char[]> replaceChar = new List<char[]>();
for (int m = 0; m < replaceData.Length; m++)
{
for (int n = 0; n < replaceData.Length; n++)
{
char[] data = new char[2];
data[0] = replaceData[m];
data[1] = replaceData[n];
replaceChar.Add(data);
}
}string source = "a*b*c";
string[] sourceSplit = source.Split(new char[] { '*' });
char[] sourceChar = source.ToArray();
List<string> result = new List<string>();
foreach (char[] replace in replaceChar)
{
string data = sourceSplit[0];
for (int c = 0; c < replace.Length; c++)
{
data += replace[c];
data += sourceSplit[c + 1];
}
result.Add(data);
}
Console.WriteLine(i);a1b1c
a1b2c
a1b3c
a2b1c
a2b2c
a2b3c
a3b1c
a3b2c
a3b3c
Press any key to continue . . .
第二个 =>后面。函数二:用x,y格式化字符串。最后SelectMany是得到一个字符串序列。foreach(string i in 字符串序列) 执行打印。