我想要这种格式的字符串
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"};
抱歉误传
答案 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);