2

我想要这种格式的字符串

 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

4 回答 4

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
于 2013-05-22T18:52:13.493 回答
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 可以使用更短的解决方案,这可以确保您不会得到数组越界异常,并且不会更直接。

于 2013-05-22T18:52:21.050 回答
0

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

var result = string.Join("|", 
    names.Select((s, index) => string.Format("{0},{1}", s, dates[index])));
于 2013-05-22T18:54:36.403 回答
0
string strCombinedString = strFirstStringArray.Select((S, i) => "|" + S + "," + strSecondStringArray[i]).Aggregate((Result, Item) => Result += Item);
strCombinedString.Remove(0, 1);
于 2013-05-22T18:55:51.353 回答