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

名前と日付を別々に分割し、2 つのシーケンスを圧縮して、名前と日付のペアを 1 つずつ組み合わせます。その後、各ペアを「|」で結合します シンボル

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 つの文字列配列を作成します。次に、長さをチェックして、それぞれに 2 つの要素があることを確認します (範囲外の配列の例外を防ぎます)。その後、String.Formatメソッドを使用して、指定された形式で新しい文字列を作成します。LINQ を使用して利用できるより短いソリューションがありますが、これにより、配列が境界外の例外を取得せず、これ以上簡単にはできません。

于 2013-05-22T18:52:21.050 に答える
0

LINQ のSelectメソッドを使用できます。オーバーロードの 1 つは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 に答える