在C#中将int与多个int数组进行比较

时间:2015-01-11 05:03:56

标签: c# arrays loops

让我们说我有一个名为mapId的整数和一个由地图编号组成的三个int数组的集合。根据用户所在的地图,将生成一个项目。对于此示例,我们可以将以下三个项目称为:common_itemuncommon_itemrare_item

int mapId;

int[] easyMaps = { 7, 10, 3, 44 };
int[] mediumMaps = { 17, 14, 32, 11, 79, 80, 82, 90, 111 };
int[] hardMaps = { 92, 98, 112, 145 };

我希望做的事情如下:
如果玩家在一张简单的地图上,则会产生:common_item
如果玩家位于中等难度的地图上,则会产生:uncommon_itemcommon_item 如果玩家在硬地图上,则会产生:rare_itemuncommon_itemcommon_item

如果不编写三个单独的for循环并分别循环遍历三个数组,我怎么能实现这个目的?在没有大量使用数组和循环的情况下,是否有更好的方法来实现这种层次结构的概念?

4 个答案:

答案 0 :(得分:2)

您无需手动迭代这些每个数组。你可以使用Array.IndexOf<int>(array, value)。此函数将返回给定数组中值的index,如果它不在数组中,则返回-1。您可以使用与此类似的if语句:

if(Array.IndexOf<int>(easyMaps, mapId) != -1){
     //Spawn common_item
}

答案 1 :(得分:2)

除了其他答案之外,我喜欢的另一个选项是System.Linq命名空间Contains

然后你可以写:

if(easyMaps.Contains(mapId)) {
    //stuff
}

我个人更喜欢这种可读性。

答案 2 :(得分:1)

您可以在此处使用 Array.Exists 方法,如下所示:

if(Array.Exists(easyMaps, mapId)) {     // common_items
    // your logic
}

if(Array.Exists(mediumMaps, mapId)) {   // uncommon_items
    // your logic
}

if(Array.Exists(hardMaps, mapId)) {     // rare_items
    // your logic
}

希望这会有所帮助!!

答案 3 :(得分:0)

<强>问题
给定mapId,获得难度级别,然后决定产生什么。

<强>解决方案:
使用Dictionary保持从mapId到Level的链接,增加的好处是字典中的查找比搜索数组更快。

以下是代码:

namespace StackOverflow27884119
{
    public enum Level
    {
        Easy,
        Medium,
        Hard
    }

    class Program
    {
        private static Dictionary<int, Level> mapsDictionary = new Dictionary<int, Level>()
                {
                    {7, Level.Easy}, {10, Level.Easy}, {3, Level.Easy}, {44, Level.Easy},
                    {17, Level.Medium}, {14, Level.Medium}, /*...*/ {111, Level.Medium},
                    {92, Level.Hard}, {98, Level.Hard}, {112, Level.Hard}, {145, Level.Hard},
                };

        static void Main(string[] args)
        {
            var mapId = 3;
            SpawnItem(3);
        }

        private static void SpawnItem(int mapId)
        {
            Level level;
            bool found = mapsDictionary.TryGetValue(mapId, out level);
            if (found)
            {
                switch (level)
                {
                    case Level.Easy:
                        // spawn common_item
                        break;
                    case Level.Medium:
                        // spawn common_item
                        // spawn uncommon_item
                        break;
                    case Level.Hard:
                        // spawn common_item
                        // spawn uncommon_item
                        // spawn rare_item
                        break;
                }
            }
        }
    }
}

PS:我并不完全明白产生某个项目的意义。如果它是某种行为,你可以考虑使用策略模式而不是切换案例。