我有一个带有值的字符串数组
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。
感谢大家的帮助,并指导我朝正确的方向前进。
答案 0 :(得分:1)
鉴于您在问题中发布的解决方案,我认为这似乎有些冗长。我以为我会尽量缩短。
这里是:
<Route exact path="/" render={() => <RegisterAccount username={this.state.username} />} />