Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索类数组的最佳方法_C#_Multidimensional Array - Fatal编程技术网

C# 搜索类数组的最佳方法

C# 搜索类数组的最佳方法,c#,multidimensional-array,C#,Multidimensional Array,我正在寻找搜索类的大型数组的最有效方法。我有一个tile数组,需要按ID查找它们,我找到的唯一方法是下面的方法,尽管我确信有更快的方法,可能是某种数组。查找,但我不确定正确的语法。任何帮助都将不胜感激 class Program { public static tiles[,] tile = new tiles[100,100]; static void Main(string[] args) { for (int x = 0; x < 100; x

我正在寻找搜索类的大型数组的最有效方法。我有一个tile数组,需要按ID查找它们,我找到的唯一方法是下面的方法,尽管我确信有更快的方法,可能是某种
数组。查找
,但我不确定正确的语法。任何帮助都将不胜感激

class Program
{
    public static tiles[,] tile = new tiles[100,100];
    static void Main(string[] args)
    {
        for (int x = 0; x < 100; x++)
        {
            for (int y = 0; y < 100; y++)
            {
                if (tile[x, y].ID == 2)
                {
                    // DO SOMETHING
                }
            }
        }
    }
}

public class tiles
{
    public int _ID;
    public int ID
    {
        get { return _ID; }
        set { _ID = value; }
    }
}
类程序
{
公共静态瓷砖[,]瓷砖=新瓷砖[100100];
静态void Main(字符串[]参数)
{
对于(int x=0;x<100;x++)
{
对于(int y=0;y<100;y++)
{
如果(平铺[x,y].ID==2)
{
//做点什么
}
}
}
}
}
公共级瓷砖
{
公共国际标识;
公共整数ID
{
获取{return\u ID;}
设置{u ID=value;}
}
}

数组只能用于线性搜索,这意味着您必须逐个遍历元素才能找到所需的元素

在您的情况下,由于您似乎希望通过其Id查找一个磁贴,因此我建议您使用一个附加的
字典
,其中Id是关键,以便在摊销的O(1)时间内检索特定的磁贴(如果您不介意额外的空间,并且假设您只需要检索磁贴,而不需要检索其在数组中的索引)。您仍然可以使用二维数组按其索引检索磁贴

优点:

  • 按其Id在摊销O(1)时间内查找瓷砖
缺点:

  • 额外空间
  • 无论何时更新数组,都需要更新字典

这是一个注释,不是答案。谢谢,我考虑了一个字典,但这只是一个示例数组,我的代码有许多格式相同的,因此如果有很多很多字典,就会变得非常混乱。我只需要编写一些代码来搜索任何数组,而不是每次单独编写。“数组只能用于线性搜索…”真的吗?当然,线性搜索是搜索数组的典型方式,但我可以实现随机搜索等。如果我愿意的话。@NPSF3000当然,您可以实现自己的算法(例如,二进制搜索,模拟BST)。这些算法通常依赖于某些不变量(例如,元素顺序),因此您不妨将数组封装在适当的类中。您为什么认为这不是最好的方法?此外,请使用单数大写类名(例如,
Tile
)。。。除非有充分的理由进行多元化,否则在您的情况下,只可能进行顺序搜索。如果您真的需要快速执行此操作,除了
平铺
,请使用
ID
键保留一个额外的参考字典。如果数据将以某种方式排序,您应该利用此功能(即二进制搜索),否则您所做的可能与获取一样好,因为使用的ID是唯一的,不要忘了在
if
块的末尾打断
。谢谢你的建议,只想注意这不是我的代码。只是我很快就想到了这个问题。