搜索类数组的最佳方法

时间:2014-01-21 09:31:17

标签: c# multidimensional-array

我正在寻找一种最有效的方法来搜索一个类的大型数组。我有一系列瓷砖,需要通过ID找到它们,我提出的唯一方法是下面虽然我确信有更快的方法,可能是某种Array.Find,但我是不确定正确的语法。任何帮助将不胜感激。

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; }
    }
}

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,由于您似乎想要根据其ID找到一个磁贴,我建议您使用额外的Dictionary<int, Tile>,其中Id是关键,以检索分摊的O(1)中的特定磁贴时间(如果你不介意额外的空间,并假设你只需要检索磁贴,而不是它在数组中的索引)。您仍然可以使用二维数组按索引检索切片。

优点:

  • 按摊销的O(1)时间按其ID进行查找。

缺点:

  • 额外空间
  • 每当更新阵列时都需要更新字典