gpt4 book ai didi

string - 生成句子与变量的所有可能组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:57 24 4
gpt4 key购买 nike

假设我有一个包含多个变量的句子,如下所示:

"lorem ipsum {a, b} dolor {c, d, e} sit amet"

假设大括号中的字母是变量,如何根据变量的所有可能组合生成一组句子?

注意:变量组的数量或变量在每组变量中的计数未知的


此特定示例的预期输出为:

"lorem ipsum {a} dolor {c} sit amet"
"lorem ipsum {b} dolor {c} sit amet"
"lorem ipsum {a} dolor {d} sit amet"
"lorem ipsum {b} dolor {d} sit amet"
"lorem ipsum {a} dolor {e} sit amet"
"lorem ipsum {b} dolor {e} sit amet"

最佳答案

一般情况下(“变量组的数量......每组内的计数......未知”)我们应该解析初始字符串(让我们在正则表达式的帮助下完成),然后枚举所有组合。

C#代码:

using System.Text.RegularExpressions;
...

private static IEnumerable<string> Generator(string source) {
// parsing: variables extracted: array of variables and their possible values
string[][] variables = Regex
.Matches(source, @"\{.*?\}")
.OfType<Match>()
.Select(match => match
.Value
.Trim('{', '}')
.Split(',')
.Select(item => "{" + item.Trim() + "}")
.ToArray())
.ToArray();

// now we should enumerate all possible variables' values
int[] indexes = new int[variables.Length];

do {
// code golf : ugly side effects but short code
int at = 0;

yield return Regex.Replace(source, @"\{.*?\}", match => variables[at][indexes[at++]]);

for (int i = 0; i < indexes.Length; ++i)
if (indexes[i] < variables[i].Length - 1) {
indexes[i] = indexes[i] + 1;

break;
}
else
indexes[i] = 0;
}
while (!indexes.All(index => index == 0));
}

演示:

string source = @"lorem ipsum {a, b} dolor {c, d, e} sit amet";

string report = string.Join(Environment.NewLine, Generator(source));

Console.Write(report);

结果:

lorem ipsum {a} dolor {c} sit amet
lorem ipsum {b} dolor {c} sit amet
lorem ipsum {a} dolor {d} sit amet
lorem ipsum {b} dolor {d} sit amet
lorem ipsum {a} dolor {e} sit amet
lorem ipsum {b} dolor {e} sit amet

另一个例子:

// 3 groups of variables with strange names
string source = @"lorem ipsum {A + 2, B, C?} dolor {XY, PQR} sit {eh?, bla-bla-bla} amet";

Console.Write(string.Join(Environment.NewLine, Generator(source)));

结果:

lorem ipsum {A + 2} dolor {XY} sit {eh?} amet
lorem ipsum {B} dolor {XY} sit {eh?} amet
lorem ipsum {C?} dolor {XY} sit {eh?} amet
lorem ipsum {A + 2} dolor {PQR} sit {eh?} amet
lorem ipsum {B} dolor {PQR} sit {eh?} amet
lorem ipsum {C?} dolor {PQR} sit {eh?} amet
lorem ipsum {A + 2} dolor {XY} sit {bla-bla-bla} amet
lorem ipsum {B} dolor {XY} sit {bla-bla-bla} amet
lorem ipsum {C?} dolor {XY} sit {bla-bla-bla} amet
lorem ipsum {A + 2} dolor {PQR} sit {bla-bla-bla} amet
lorem ipsum {B} dolor {PQR} sit {bla-bla-bla} amet
lorem ipsum {C?} dolor {PQR} sit {bla-bla-bla} amet

关于string - 生成句子与变量的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com