提问者:小点点

IDictionary值覆盖


这是我第一次需要用字典做些事情。我不能覆盖item.value,我不知道该如何做到这一点。

编写一个程序,从标准输入到文件结束(EOF)的行中每行读取一只猴子的名字,以及它以以下格式收集的香蕉数量:

monkey_name;香蕉数

程序将猴子的名字和它们收集到的香蕉数量以示例输出中给出的形式写入标准输出,并根据猴子的名字按词典升序!

输入:

Jambo;10
Kongo;5
Charlie;12
Jambo;10
Koko;14
Kongo;10
Jambo;5
Charlie;8 

输出:

Charlie: 20
Jambo: 25
Koko: 14
Kongo: 15

下面是我的代码:

            string input;
            string[] row = null;
            IDictionary<string, int> majom = new SortedDictionary<string, int>();
            int i;
            bool duplicate = false;
            while ((input = Console.ReadLine()) != null && input != "")
            {
                duplicate = false;
                row = input.Split(';');
                foreach(var item in majom)
                {
                    if(item.Key == row[0])
                    {
                        duplicate = true;
                        i = int.Parse(row[1]);
                     ///item.Value += i; I'm stuck at here. I dont know how am i able to modify the Value
                    }
                }
                if(!duplicate)
                {
                    i = int.Parse(row[1]);
                    majom.Add(row[0], i);
                }
                
            }
            foreach(var item in majom)
            {
                Console.WriteLine(item.Key + ": " + item.Value);
            }

对不起,我的英语不好,我尽力了。


共1个答案

匿名用户

class Program
{
    static void Main()
    {
        string input;
        string[] row;
        IDictionary<string, int> majom = new SortedDictionary<string, int>();

        //int i;
        //bool duplicate = false;

        while ((input = Console.ReadLine()) != null && input != "")
        {
            //duplicate = false;
            row = input.Split(';');

            // Usually dictionaries have key and value
            // hier are they extracted from the input
            string key = row[0];
            int value = int.Parse(row[1]);

            // if the key dose not exists as next will be created/addded
            if (!majom.ContainsKey(key))
            {
                majom[key] = 0;
            }

            // the value coresponding to the already existing key will be increased
            majom[key] += value;

            //foreach (var item in majom)
            //{
            //    if (item.Key == row[0])
            //    {
            //        duplicate = true;
            //        i = int.Parse(row[1]);
            //        item.Value += i; I'm stuck at here. I dont know how am i able to modify the Value
            //    }
            //}
            //if (!duplicate)
            //{
            //    i = int.Parse(row[1]);
            //    majom.Add(row[0], i);
            //}
        }

        foreach (var item in majom)
        {
            Console.WriteLine(item.Key + ": " + item.Value);
        }
    }  
}