C#字符串数组修改,无需递归

时间:2019-06-12 00:02:58

标签: c# arrays string

我有一个带有值的字符串数组

patrick 
portland 
vic 

我想实现以下目标:

对于第一遍,我想在每个条目的末尾添加一个带有*的数组:

patrick*
portland*
vic*

第二遍,我想用〜代替*:

patrick*
portland*
vic~

patrick*
portland~
vic*

patrick~
portland*
vic*

第三遍,我想用〜:替换另一个*:

patrick~
portland*
vic~

patrick~
portland~
vic*

patrick*
portland~
vic~

依此类推,直到所有*都被〜代替。

有没有一种方法可以不递归?

编辑1:

需要基于以下内容生成以下字符串:patrick portland vic

patrick*portland*vic*
patrick*portland*vic~
patrick*portland~vic*
patrick~portland*vic*
patrick~portland*vic~
patrick~portland~vic*
patrick*portland~vic~
patrick~portland~vic~

我认为将字符串拆分成一个数组然后进行处理会更容易。

编辑2:

设法使用笛卡尔积来解决这个问题。

    string[] stnameSplit = streetName.Split(' ');

    string[] chars = { "*", "~" };
    var cartesianProduct = from name in stnameSplit
                           from cha in chars
                           select new { name, cha };

    List<string> vals = cartesianProduct.Select(p => p.name + p.cha).ToList();

        List<List<string>> embeddedList = new List<List<string>>();

        int ctr = 0;

        List<string> l = new List<string>();

        foreach (string s in vals)
        {
            l.Add(s);

            if (ctr % 2 == 1)
            {
                embeddedList.Add(l);

                l = new List<string>();
            }

            ctr++;
        }

        var result = embeddedList.ToArray().CartesianProduct();

最后一行调用Eric Lippert所述的方法CartesianProduct。

感谢大家的帮助,并指导我朝正确的方向前进。

1 个答案:

答案 0 :(得分:1)

鉴于您在问题中发布的解决方案,我认为这似乎有些冗长。我以为我会尽量缩短。

这里是:

<Route exact path="/" render={() => <RegisterAccount username={this.state.username} />} />