在 C# 中比较一个 int 与多个 int 数组

本文关键字:int 数组 一个 比较 | 更新日期: 2023-09-27 18:37:08

假设我有一个名为mapId的整数和一个由map数字组成的三个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 循环并分别遍历三个数组,我怎么能做到这一点?有没有更好的方法来实现这种层次结构概念,而无需大量使用数组和循环?

在 C# 中比较一个 int 与多个 int 数组

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

然后你可以写:

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

就我个人而言,我更喜欢它的可读性。

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

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

你可以在这里使用Array.Exist方法,如下所示:

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
}

希望这会有所帮助!!

问题
给定一个mapId,获取难度级别,然后决定生成什么。

溶液:
使用字典来保持从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:我不太明白生成物品的确切含义。如果是某种行为,您可以考虑使用策略模式而不是切换情况。