C# 使用字符分隔符生成具有特定模式的字符串

C# 使用字符分隔符生成具有特定模式的字符串,c#,string,linq,lambda,C#,String,Linq,Lambda,我想要一个这种格式的字符串 name1,date1|name2,date2 为此,我写了一个方法 int ifirstStringLength = strFirstStringArray.Length; int iSecondStringLength = strSecondStringArray.Length; if (ifirstStringLength != iSecondStringLength) throw new Exception("First and Second A

我想要一个这种格式的字符串

 name1,date1|name2,date2
为此,我写了一个方法

int ifirstStringLength = strFirstStringArray.Length;
int iSecondStringLength = strSecondStringArray.Length;

if (ifirstStringLength != iSecondStringLength)
    throw new Exception("First and Second Array should be of same length");

for (int index = 0; index < ifirstStringLength; index++)
{
     strCombinedString = strCombinedString + strFirstStringArray[index] + chrElementSeprator.ToString() + strSecondStringArray[index];
     if (index < ifirstStringLength - 1)
         strCombinedString = strCombinedString + chrItemSeperator.ToString();
}

return strCombinedString;

很抱歉沟通不畅

我们的想法是将姓名和日期分开,然后压缩两个序列,将姓名和日期对一次合并一个。然后用“|”符号连接每一对

string[] names = {"name1", "name2"};
string[] dates = {"date1", "date2"};

var pairs = names.Zip(dates, (name, date) => name + "," + date);

string result = string.Join("|", pairs);

Console.WriteLine(result);
印刷品:

name1,date1|name2,date2

其思想是将姓名和日期分开,然后压缩两个序列,一次组合一个姓名和日期对。然后用“|”符号连接每一对

string[] names = {"name1", "name2"};
string[] dates = {"date1", "date2"};

var pairs = names.Zip(dates, (name, date) => name + "," + date);

string result = string.Join("|", pairs);

Console.WriteLine(result);
印刷品:

name1,date1|name2,date2

你的代码对我来说太复杂了。不完全确定这将满足您的所有要求,但我会这样做

  //assuming both strings are comma delimited
  string[] nameTokens = nameString.Split(',');
  string[] dateTokens = dateString.Split(',');
  string result;
  if (nameTokens.Length == 2 && dateTokens.Length == 2)
      result = String.Format("{1},{2}|{3},{4}", nameTokens[0], dateTokens[0], nameTokens[1], dateTokens[1]);
  else
       Console.WriteLine("BAD INPUT");

解释;我首先拆分名称和日期字符串,这样就有了两个字符串数组。然后检查长度,确保每个长度都有2个元素,以防止数组越界异常。之后,我使用String.Format方法以指定的格式创建一个新字符串。使用LINQ可以提供较短的解决方案,但是,这可以确保您不会得到数组越界异常,并且不会更直接。

您的代码对我来说似乎不必要的复杂。不完全确定这将满足您的所有要求,但我会这样做

  //assuming both strings are comma delimited
  string[] nameTokens = nameString.Split(',');
  string[] dateTokens = dateString.Split(',');
  string result;
  if (nameTokens.Length == 2 && dateTokens.Length == 2)
      result = String.Format("{1},{2}|{3},{4}", nameTokens[0], dateTokens[0], nameTokens[1], dateTokens[1]);
  else
       Console.WriteLine("BAD INPUT");
解释;我首先拆分名称和日期字符串,这样就有了两个字符串数组。然后检查长度,确保每个长度都有2个元素,以防止数组越界异常。之后,我使用String.Format方法以指定的格式创建一个新字符串。使用LINQ可以提供较短的解决方案,但是,这可以确保您不会得到数组越界异常,并且不会更直接。

您可以使用LINQ的Select方法。其中一个重载需要一个。这将为您提供数组中当前字符串的索引

var result = string.Join("|", 
    names.Select((s, index) => string.Format("{0},{1}", s, dates[index])));
您可以使用LINQ的选择方法。其中一个重载需要一个。这将为您提供数组中当前字符串的索引

var result = string.Join("|", 
    names.Select((s, index) => string.Format("{0},{1}", s, dates[index])));


String.JoinstrCombinedString,|可能有效。第一个字符串将有名称,第二个字符串将有日期,我们希望合并them@ShafqatMasood用逗号分隔?是的,用逗号分隔,下一项应该用|分隔,为什么您选择这个问题的lambda标记?你是说LINQ,可能吗?String.JoinstrCombinedString,|可能有用。第一个字符串有名称,第二个字符串有日期,我们要合并them@ShafqatMasood用逗号分隔?是的,用逗号分隔,下一项应该用|分隔,为什么您选择这个问题的lambda标记?你们是指LINQ,也许?你们是指LINQ,也许?你们是指LINQ,也许?你们是指LINQ,也许?也许?你们是指LINQ,也许?你们是指LINQ,也许?也许?你们的代码给我这个输出n,可能,你们的代码给我这个输出n,d,d,d,a,d,a,t,t,e,e,e,e,e,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,可能,可能,1,可能,可能,可能,可能,可能,可能是你们,可能,可能是你们,可能是你们,可能是你们,你们,你们,可能,可能,你们,你们,可能是,可能,可能是,可能是,可能是,可能是,可能是,可能是,可能是,可能是,可能是,可能是,可能?你们,也许?你们,也许?你们,可能?| m | t | e | e | 1 | 1 | | | | | | | | n | d | a | m | t | e | e | 2 |嗯,我以为你真的在使用字符串数组。与字符串[]strFirstStringArray、strSecondStringArray;类似;。如果我使用数组,您的代码将为我提供| name1 | date1 | name2 | date2。请注意删除行以删除第一个| ur代码,给我这样的输出| n | d | a | a | m | t | e | e | 1 | 1 | |,| n | d | a | a | m | t | e | e | 2 |嗯,我还以为您真的在使用字符串数组。与字符串[]strFirstStringArray、strSecondStringArray;类似;。如果我使用数组,您的代码将为我提供| name1 | date1 | name2 | date2。请注意删除行以删除第一行|如果我有您提到的输入,那么您的代码可以正常工作..但是如果我想使用名称和日期数组,那么我无法工作..我想是由于通信错误。所以我投了您的票thanks@ShafqatMasood你的名字和日期的确切数据类型是什么?谢谢,它是有效的…但另一个人已经有了使用“选择并加入”进行回复。你已经使用了zip和join。。使用zip的任何特殊原因。正如我第一次看到的那样,@ShafqatMasood使用什么取决于你。如果两个数组的长度不同,但日期[索引]不同,Zip将优雅地处理如果名称多于日期,将导致IndexOutOfRangeException使用zip忘记indexoutofrange异常..酷如果我有您提到的输入,您的代码工作正常..但是如果我想使用名称和日期数组,则无法工作..我想是由于通信错误。所以我投了您的票thanks@ShafqatMasood什么您的姓名和日期的确切数据类型?谢谢,它可以工作…但是另一个人已经使用select and join回复了。你已经使用了zip和join。。使用zip的任何特殊原因。正如我第一次看到的那样,@ShafqatMasood使用什么取决于你。如果两个数组的长度不同,Zip将很好地处理,但是如果名称多于Date,dates[index]将导致IndexOutOfRangeException。因此,我们忘记了使用Zip的indexoutofrange异常。coolit适用于2项。。如果我有100件东西怎么办…然后呢??所以你的代码太具体了。@ShafqatMasood你的问题太具体了:p你说过你需要一个可以处理任何大小的列表的方法吗
适用于任何大小列表的代码。它适用于2项。。如果我有100件东西怎么办…然后呢??所以你的代码太具体了。@ShafqatMasood你的问题太具体了:p如果你说你需要一个可以处理任意大小列表的方法,我会编写可以处理任意大小列表的代码。