首页 > 解决方案 > 收集 int 并根据它们的字符串在新行上打印它们

问题描述

我在这里询问如何读取一个字符串行,检查它是否包含在字典中,如果是,则添加一个数字。例如,如果输入是Gold并且下一行是115:应该将数字分配给字符串。每次循环旋转时,它都应检查是否包含字符串并将下一个int行添加到其中。

var text = new SortedDictionary<string, int>();

while (true)
{               

    for (int i = 0; i < 2000000000; i++)
    {
        string[] sequenceOfStrings = Console.ReadLine()
        .Split();

        var material = sequenceOfStrings[0];

        if (material == "stop")
        {
            break;
        }
        if (!text.ContainsKey(material))
        {
            text.Add(material, i);
        }

你得到一个字符串序列,每一个都在一个新的行上。控制台上的每一个奇数行都代表一种资源(例如金、银、铜等),每一个偶数代表一种资源。您的任务是收集资源并将它们分别打印在新行上。以以下格式打印资源及其数量:{resource} –> {quantity}。输入量将在[1 … 2 000 000 000]范围内

谢谢你的耐心。汤姆

标签: c#dictionarysum

解决方案


解决您的问题的代码可能如下所示:

        var text = new SortedDictionary<string, int>();

        while (true)
        {
            string material = Console.ReadLine();
            if(material == "stop")
            {
                break;
            }


            string quantityString = Console.ReadLine();

            if (!Int32.TryParse(quantityString, out int newQuantity))
            {
                continue;
            }

            if (text.TryGetValue(material, out int currentQuantity))
            {
                text[material] = currentQuantity + newQuantity;
            }
            else
            {
                text[material] = newQuantity;
            }
        }

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

顺便说一句,你真的需要 SortedDictionary 吗?如果您有很多键,那么(取决于输入数据分布)执行TryGetValue可能比普通 Dictionary 花费更多时间。


推荐阅读