Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拆分并合并两个不同的字符串_C#_Linq - Fatal编程技术网

C# 拆分并合并两个不同的字符串

C# 拆分并合并两个不同的字符串,c#,linq,C#,Linq,我试图创建一个字符串,下面是我试图实现的目标: String first = "Previous.value1 | Previous.value2"; String second = "New.value1| New.value2"; 我正在尝试创建最终字符串,如下所示: string final ="generate Previous.value1 cross New.value1 ? Previous.value1 cross New.value2"; String first = "P

我试图创建一个字符串,下面是我试图实现的目标:

String first = "Previous.value1 | Previous.value2";
String second = "New.value1| New.value2";
我正在尝试创建最终字符串,如下所示:

string final ="generate Previous.value1 cross New.value1 ? Previous.value1 cross New.value2";
String first = "Previous.value1 | Previous.value2 | Previous.value3 | Previous.value4";
String second = "New.value1 | New.value2 | New.value3";
但问题是什么时候会出现如下不匹配:

String first = "Previous.value1 | Previous.value2";
String second = "New.value1";
然后我想要这样,因为第二个变量中的Previous.Value2没有匹配的值:

到目前为止,当两个字符串中的值计数相同时,我成功地生成了最终字符串

string final = "generate";
if (first.Split('|').Count() - second.Split('|').Count() == 0)
{
    int i = 0;
    foreach (var item in first.Split('|').Count())
    {
        if (i == 0)
            final = final + item + " cross " + second.Split('|')[i];
        else
            final = final +  " ? " + item + " cross " + second.Split('|')[index];
        i++;
    }
}
使用以下命令尝试此LINQ查询:


为了保持您使用的样式,我建议首先拆分两个字符串

String first = "Previous.value1 | Previous.value2";
String second = "New.value1 | New.value2";
string final = "generate ";

string[] first_values = first.Split('|');
string[] second_values = second.Split('|');
然后,您可以在最短的数组上确定自己的方向。如果第二个_值中没有足够的对应值用于第一个_值,则只收集对应的值。使用法线for循环:

// run until the length of the shortest one
for (int i = 0; i < Math.Min(first_values.Length, second_values.Length); i++)
{
    // bild the normal cross-version for the first position
    string sentence = first_values[i] + " cross " + second_values[i];
    // if on first position use normal version otherwise put a ? infront of it
    final += i == 0 ? sentence : " ? " + sentence;
}

那么问题出在哪里呢?ifsecond.Contains |{//do something}@TimSchmelter:我已经用更改更新了我的问题。Sorry@Cubi:请参阅我的更新问题,我在其中突出显示了问题部分。您能否向我解释您的代码最重要的zip函数以了解此新zip函数及其用法。有关zip函数的详细信息,请,点击我在帖子中提供的链接。在您的案例中,它基本上采用两个单独的列表,即拆分字符串,并将它们组合成一个列表,在您的案例中使用选择器创建带有交叉符号的文本。在第二行中,组合列表连接到一个字符串。但是在这种情况下,该函数的行为如何:string first=Previous.value1 | Previous.value2;字符串秒=New.value1;。关于这个输入,你能解释一下吗?这是我链接的MSDN页面所说的:如果序列没有相同数量的元素,该方法将合并序列,直到它到达其中一个序列的末尾。例如,如果一个序列有三个元素,而另一个序列有四个元素,则结果序列将只有三个元素。因此,示例中|后面的部分将被忽略,您将获得所需的结果。我建议您在调试器中尝试此操作。很高兴提供帮助。作为一个一般的外卖:你可以用LINQ做非常强大的列表。不管怎样,如果你见到我,你就会知道我不是先生-非常感谢您的回答和帮助:
// run until the length of the shortest one
for (int i = 0; i < Math.Min(first_values.Length, second_values.Length); i++)
{
    // bild the normal cross-version for the first position
    string sentence = first_values[i] + " cross " + second_values[i];
    // if on first position use normal version otherwise put a ? infront of it
    final += i == 0 ? sentence : " ? " + sentence;
}
String first = "Previous.value1 | Previous.value2 | Previous.value3 | Previous.value4";
String second = "New.value1 | New.value2 | New.value3";