繁体   English   中英

如何选择记录号最高的阵列号?

[英]How can I pick out the array number with the highest record number?

我正在制作一个瓶子收集计划。 我正在输入4个房间的瓶子收集,当用户输入退出时,会显示房间收集的瓶子清单,并选择获胜者。 我的代码现在选择了最高记录瓶数,但我希望它显示具有该瓶数的房间号。 如何更改我的代码以使其工作?

namespace BottleDrive
{
    class Program
    {
        static void Main(string[] args)
        {   //Initialize loop rooms to 4
            int[] rooms = new int[4];
            //Start of while loop to ask what room your adding into. 
            while (true)
            {
                Console.Write("Enter the room you're in: ");
                //If user enters quit at anytime, the code will jump out of while statement and enter for loop below
                string quit = Console.ReadLine();
                if (quit == "quit")
                    //Break statement separates embedded statement and is needed inorder to allow 
                    break; 


                //Variable room holds the number of bottles collect by each room. 
                int room = int.Parse(quit);
                Console.Write("Bottles collected in room {0}: ", room);
                // This line adds the count of bottles and records it so you can continuously count the bottles collected.
                rooms[room - 1] += int.Parse(Console.ReadLine());
            }
            //This for statement lists the 4 rooms and their bottle count when the user has entered quit.
            for (int i = 0; i < rooms.Length; ++i)
                Console.WriteLine("Bottles collected in room {0} = {1}", i + 1, rooms[i]);

            Console.WriteLine("And the Winner is room " + rooms.Max().ToString() + "!!!");
        }
    }
}

尝试这个:

        int maxValue = 0;
        int maxRoomNumber = 0;
        for (int i = 0; i < rooms.Length; ++i)
        {
            if (rooms[i] > maxValue)
            {
                maxValue = rooms[i];
                maxRoomNumber = i + 1;
            }
            Console.WriteLine("Bottles collected in room {0} = {1}", i + 1, rooms[i]);
        }

        Console.WriteLine("And the Winner is room " + maxRoomNumber + "!!!");

您对rooms.Max()是关闭的,除了它将返回最大值并且您想要索引。

您可以使用简单的for循环来查找索引。 否则,你可以使用优雅的“LINQ”方法

注意:不要忘记允许多个房间具有相同最大值的情况!

我想知道为什么LINQ没有包含IndexOf()扩展名。 我最后编写了自己的项目:

public static class Extensions
{
    public static int IndexOf<T>(this IEnumerable<T> items, Predicate<T> predicate)
    {
        int index = 0;
        foreach (T item in items)
        {
            if (predicate(item))
                break;
            index++;
        }

        return index;
    }

    public static int IndexOf<T>(this IEnumerable<T> items, T value)
    {
        int index = 0;
        foreach (T item in items)
        {
            if (item.Equals(value))
                break;
            index++;
        }

        return index;
    }
}

有了它你可以简单地做:

Console.WriteLine("And the Winner is room " + rooms.IndexOf(rooms.Max()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM