2017-02-07 40 views
0

以下のコードスニペットを分割文字列に対して繰り返します。foreachループ内にKeyValuePair <int, int>を設定する方法

if (!string.IsNullOrEmpty(profile.ContactNumber)) 
     { 
      var splitContract = profile.ContactNumber.Split(new string[] { "and", "&" }, StringSplitOptions.RemoveEmptyEntries); 

      foreach (var contract in splitContract) 
      { 
       //check the split if it contains "x" or "X" character - if it does contain, it means it's a valid contract 
       if (contract.Contains("x") || contract.Contains("X")) 
       { 
        var condensedString = contract.Replace(" ", ""); 
        var split = condensedString.Split(new char[] { 'x', 'X' }); 

        GetNumbersOnly(split); 
       } 
      }  
     } 

private void GetNumbersOnly(string[] inputArray) 
    { 
     var ListKeyValuePair = new List<KeyValuePair<string, string>>(); 

     foreach (var item in inputArray) 
     { 
      var numberToAdd = Regex.Replace(item, "[^0-9]", "", RegexOptions.None); 

      ListKeyValuePair.Add(?, ?); 
     } 
    } 

GetNumbersOnlyメソッドでは、各ループのKeyValuePairのリストをどのように設定できますか?

inputArray変数は、最初の繰り返しの場合[0] = 100、[1] = 5の配列要素を持ちます。

KeyValuePair {100、5}、{200、10}、{500,15}の望ましい出力です。

申し訳ありませんが、私はそれをgoogledときに私は関連するシナリオを見つけることができないようです。これに関する助けがあれば大歓迎です。

答えて

0

キーと値が別々の配列項目に格納されるため、ロジックはの注文に依存します。このような場合は、for...eachを避けて、代わりに平方の古いforを使用すると、反復の方法を制御できます。

private void GetNumbersOnly(string[] inputArray) 
{ 
    var ListKeyValuePair = new List<KeyValuePair<string, string>>(); 

    for (int i=0; i< inputArray.Length; i+=2) //The "2" here is very important! 
    { 
     var numberToAdd1 = Regex.Replace(inputArray[i], "[^0-9]", "", RegexOptions.None); 
     var numberToAdd2 = Regex.Replace(inputArray[i+1], "[^0-9]", "", RegexOptions.None); 

     ListKeyValuePair.Add(new KeyValuePair<string, string>(numberToAdd1, numberToAdd2)); 
    } 
} 
+0

ListKeyValuePair.Add(numberToAdd1、numberToAdd2);エラーを返します。 "メソッド 'Add'に2つの引数が必要です。ListKeyValuePairはリストですが、AddRangeを試しましたが、同じエラーです。 – Juniuz

+0

ああ、私は今@ジョンウ、その行はこのListKeyValuePair.Add(新しいKeyValuePair (numberToAdd1、numberToAdd2))のようにする必要があります。 – Juniuz

+0

おっとり、修正済み –

0

ListKeyValuePair.Add()関数は、KeyValuePair型の1つのフィールドを必要としています。新しいKeyValuePair(){key = item、value = numberToAdd}を使用して、これらのいずれかを作成する必要があります。

なぜキー値のペアをリストに保持していますか?なぜ辞書はありませんか?重複ペアが必要ですか?

+0

良い提案ですが、私はペアを複製したくありません。 Dictionary を使用してコードに基づいて辞書を設定する方法は? – Juniuz

+0

辞書 MyDict =新しい辞書(); ... MyDict.Add(item、numberToAdd); (MyDict.ContainsKey(item)){//警告する} else {//これを追加} –

+0

MyDict.Add(item、numberToAdd)の項目は何ですか?私の質問がばかだと申し訳ありません。 – Juniuz