【发布时间】:2021-07-11 17:14:51
【问题描述】:
我有 2 个不同的正则表达式匹配,目前使用 2 个 foreach 循环来获取匹配值。 但是,就目前而言,如果一个 foreach 有效,那么另一个无效。
试试 1
foreach (string dir in multiTrimmed1)
{
foreach (string dir2 in multiTrimmed2)
{
var forVal2= dir.Replace("$", "").Replace(" ", "");
var forVal3 = dir2.Replace(",", "");
var parsedParams= new ParsedMethod()
{
Value1= forVal1,
Value2 = Convert.ToDecimal(forVal2),
Value3 = Convert.ToDecimal(forVal3),
Value4 = forVal4
};
MergeAllValues(parsedParams);
}
}
所以这里的问题是 multiTrimmed1 和 multiTrimmed2 每个都有 string[4]。
假设 A、B、C 和 D。 在我的尝试 1 中,我希望 forVal2 和 forVal3 正确地通过循环。
我的意思是,当 forVal2 为 A 时,forVal3 也是 A - 将其发送到 MergeAllValues、next、B 和 B - 将其发送到 MergeAllValues、next、C 和 C - 将其发送到 MergeAllValues 和下一个 D 和D - 将其发送到 MergeAllValues。
目前只有一个循环有效。如果 forVal3 的值更改为 A、B、C 和 D - 那么 forVal2 将在 A 处停止。
试试 2
bool loopAgain = true;
while (loopAgain)
{
loopAgain = false;
foreach (string dir in multiTrimmed1)
{
foreach (string dir2 in multiTrimmed2)
{
var forVal2= dir.Replace("$", "").Replace(" ", "");
var forVal3 = dir2.Replace(",", "");
var parsedParams= new ParsedMethod()
{
Value1= forVal1,
Value2 = Convert.ToDecimal(forVal2),
Value3 = Convert.ToDecimal(forVal3),
Value4 = forVal4
};
MergeAllValues(parsedParams);
loopAgain = true;
break;
}
}
在这种情况下,forVal2 得到的值很好,但 forVal3 保持在 A
试试 3
bool loopAgain = true;
while (loopAgain)
{
loopAgain = false;
foreach (string dir in multiTrimmed1)
{
var forVal2= dir.Replace("$", "").Replace(" ", "");
foreach (string dir2 in multiTrimmed2)
{
var forVal3 = dir2.Replace(",", "");
var parsedParams= new ParsedMethod()
{
Value1= forVal1,
Value2 = Convert.ToDecimal(forVal2),
Value3 = Convert.ToDecimal(forVal3),
Value4 = forVal4
};
MergeAllValues(parsedParams);
loopAgain = true;
break;
}
}
仍然只有工作循环有效。我怎样才能使两者都工作?
【问题讨论】:
-
您在寻找Zip,而不是寻找
multiTrimmed1和multiTrimmed2的所有组合(如尝试1)? -
我没用过。如果这是解决方案,我会研究它
-
"在这种情况下,forVal2 得到的值很好,但 forVal3 保持在 A" -
break;退出包含它的循环。您在 Try 2 和 Try 3 中无条件地调用它,因此在multiTrimmed2的第一次迭代中,它将退出循环。这实际上与编写string dir2 = multiTrimmed2.First();并完全取消最内层循环相同。 -
如果能确认multiTrimmed1和multiTrimmed2有1:1的关系,由每个元素在列表中的位置决定(即multiTrimmed1中的位置0对应multiTrimmed2中的位置0,1对1,2对2等)然后我可以用
Zip写一个答案。 -
那么一个for循环呢?您遍历所有索引,然后您可以使用这些索引从两个列表中访问相应的项目
标签: c#