使用char分隔符构建具有特定模式的字符串

时间:2013-05-22 18:46:24

标签: 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 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;

问题1:
这是一种好方法还是更好的方法?

问题2:
不知道我是否想用linq / lambda表达式实现这个目标?

更新:

我的输入是

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

抱歉误传

4 个答案:

答案 0 :(得分:3)

想法是分别拆分名称和日期,然后压缩两个序列,一次组合一个名称 - 日期对。之后用'|'加入每一对符号

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

答案 1 :(得分:1)

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

  //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可以使用更短的解决方案,但这可以确保您不会获得数组超出范围的异常,并且不能更直接。

答案 2 :(得分:0)

您可以使用LINQ的Select方法。其中一个重载需要Func<TSource, Int32, TResult>。这为您提供了数组中当前字符串的索引。

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

答案 3 :(得分:0)

string strCombinedString = strFirstStringArray.Select((S, i) => "|" + S + "," + strSecondStringArray[i]).Aggregate((Result, Item) => Result += Item);
strCombinedString.Remove(0, 1);