如何在foreach循环中填充KeyValuePair <int,int =“”>

时间:2017-02-07 04:09:06

标签: c# logic keyvaluepair

我有以下代码片段,它遍历一个分裂字符串。

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方法中,如何在每个循环中填充List of KeyValuePair?

对于第一次迭代,inputArray变量的数组元素为[0] = 100,[1] = 5,依此类推。

这是KeyValuePair {100,5},{200,10},{500,15}的理想输出。

抱歉,当我用Google搜索时,我似乎无法找到任何相关的情况。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

ListKeyValuePair.Add()函数需要1个字段,其类型为KeyValuePair。您需要使用新的KeyValuePair(){key = item,value = numberToAdd}制作其中一个;

为什么要将键值对保留在列表中?为什么不是字典?你想要重复的对吗?

答案 1 :(得分:0)

由于键和值存储在单独的数组项中,因此您的逻辑依赖于 order 。在这种情况下,您应该避免使用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));
    }
}