收集int并根据其字符串将它们分别打印在新行上

时间:2018-11-07 09:20:37

标签: c# dictionary sum

我在这里问如何读取一个字符串行,检查它是否包含在词典中,如果有,请在其中添加一个数字。例如,如果输入为 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);
        }

为您提供了一系列字符串,每个字符串都换行。控制台上的每个奇数行代表一种资源(例如,金,银,铜等)和每偶数 –数量。您的任务是收集资源并在新行中将它们打印出来。以以下格式打印资源及其数量: {资源} –> {数量}。输入的数量将在 [1…2000000000000]

感谢您的耐心配合。 汤姆

1 个答案:

答案 0 :(得分:0)

解决您问题的代码如下:

        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吗?如果您有很多键,那么(取决于输入数据的分布)与传统的Dictionary相比,执行 TryGetValue 可能要花费更多时间。