2017-02-07 4 views
0

У меня есть этот фрагмент кода, как показано ниже, который выполняет итерацию по разделительной строке.Как заполнить KeyValuePair <int, int> внутри цикла foreach

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}.

Извините, я не могу найти какой-либо связанный сценарий, когда я искал его. Любая помощь с этим очень ценится.

ответ

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); возвращает ошибку. «Нет перегрузки для метода« Добавить »принимает 2 аргумента» ListKeyValuePair - это список, я пробовал AddRange, но по-прежнему ту же ошибку. – Juniuz

+0

О, я получаю это сейчас @ Джона Ву, эта строка должна быть такой, как этот ListKeyValuePair.Add (новый KeyValuePair <строка, строка> (numberToAdd1, numberToAdd2)); – Juniuz

+0

Упс, исправлено –

0

Функция ListKeyValuePair.Add() ожидает 1 поле типа KeyValuePair. Вам нужно сделать один из них с новым ключом KeyValuePair() {key = item, value = numberToAdd};

Почему вы храните пары ключевых значений в списке? Почему не словарь? Вы хотите дублировать пары?

+0

Хорошее предложение, я не хочу дублировать пары. Если я собираюсь использовать Dictionary , как заполнять словарь на основе кода? – Juniuz

+0

Словарь <строка, строка> MyDict = новый словарь (); ... MyDict.Add (item, numberToAdd); Вы можете проверить, существует ли ключ, если (MyDict.ContainsKey (item)) {// предупреждать пользователя} else {// добавить его} –

+0

что такое элемент в MyDict.Add (item, numberToAdd)? извините, если мой вопрос глуп. – Juniuz

Смежные вопросы