gpt4 book ai didi

c# - 字符串数据的多个逻辑 "branches"的拆分和连接

转载 作者:太空狗 更新时间:2023-10-29 20:34:15 26 4
gpt4 key购买 nike

我知道 SO 上有几个关于排列列表的措辞相似的问题,但它们似乎并没有完全解决我正在寻找的问题。我知道有办法做到这一点,但我正在画一个空白。我有一个类似于此格式的平面文件:

Col1|Col2|Col3|Col4|Col5|Col6
a|b,c,d|e|f|g,h|i
. . .

技巧如下:我想创建这些行的所有可能排列的列表,其中行中的逗号分隔列表表示可能的值。例如,我应该能够使用 IEnumerable<string>将上述内容表示为这样的行:

IEnumerable<string> row = new string[] { "a", "b,c,d", "e", "f", "g,h", "i" };
IEnumerable<string> permutations = GetPermutations(row, delimiter: "/");

这应该生成以下字符串数据集合:

a/b/e/f/g/i
a/b/e/f/h/i
a/c/e/f/g/i
a/c/e/f/h/i
a/d/e/f/g/i
a/d/e/f/h/i

在我看来,这似乎很适合递归方法,但显然我遇到了星期一的糟糕情况,我无法完全思考如何处理它。一些帮助将不胜感激。应该做什么GetPermutations(IEnumerable<string>, string)看起来像?

最佳答案

你让我在“递归”。这是另一个建议:

private IEnumerable<string> GetPermutations(string[] row, string delimiter,
int colIndex = 0, string[] currentPerm = null)
{
//First-time initialization:
if (currentPerm == null) { currentPerm = new string[row.Length]; }

var values = row[colIndex].Split(',');
foreach (var val in values)
{
//Update the current permutation with this column's next possible value..
currentPerm[colIndex] = val;

//..and find values for the remaining columns..
if (colIndex < (row.Length - 1))
{
foreach (var perm in GetPermutations(row, delimiter, colIndex + 1, currentPerm))
{
yield return perm;
}
}
//..unless we've reached the last column, in which case we create a complete string:
else
{
yield return string.Join(delimiter, currentPerm);
}
}
}

关于c# - 字符串数据的多个逻辑 "branches"的拆分和连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945987/

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