C# 搜索类数组的最佳方法
我正在寻找搜索类的大型数组的最有效方法。我有一个tile数组,需要按ID查找它们,我找到的唯一方法是下面的方法,尽管我确信有更快的方法,可能是某种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
数组。查找,但我不确定正确的语法。任何帮助都将不胜感激
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
块的末尾打断。谢谢你的建议,只想注意这不是我的代码。只是我很快就想到了这个问题。