C# 非邪恶的快速数组查找?

标签 c# arrays performance dictionary

我想让大量的类实例返回相同的相似数据字段,就像在这个示例实现中一样:

foreach (SomeClass sc in SomeClasses)
{
    System.Console.WriteLine(sc.GetData("1st field"));
    System.Console.WriteLine(sc.GetData("Another field"));
    System.Console.WriteLine(sc.GetData("and another"));
}

// ---- inside SomeClass:

Dictionary<string, string> myData;

public string GetData(string field)
{
    return myData[field];
}

我不喜欢的是必须在示例中一遍又一遍地进行的字符串散列、查找和匹配(我假设这就是 Dictionary 的工作原理)。我真的很想找到一个更好的方法。

来自C世界,我想到为所有字段分配一个唯一的整数键,这样我就可以变成数组查找:

// ---- inside SomeClass:

string[] MyData;

public string GetData(int field_key)
{
    return MyData[field_key];
}

现在字段查找是高效的,但在这些“数组是邪恶的”时代感觉不对,而且处理 field_key 整数是乏味且容易出错的。

我不知道我是否在这里追逐性能幽灵,只是我想找到一种既高效又干净的设计。

建议?

最佳答案

你为什么不想查字典?字典的一种非常有效的实现方式是对数组中的散列进行索引查找。因此,底层实现可以归结为第二个示例中的代码。这将使它成为 O(1)

使用字典

关于C# 非邪恶的快速数组查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637542/

相关文章:

c# - Entity Framework 数据库优先方法中的存储过程

c - 如何将 uint8 * 转换为包含可变长度数组元素的结构? (C 编程)

android - 如何在android中释放内存以避免内存泄漏

java - 如何在 context.xml 中调整 MySQL 连接池参数

C# 泛型类型相等运算符

c# - 什么是以及如何修复 System.TypeInitializationException 错误?

javascript - 随机非重复数组JS(不用.includes()求解)

sql - View 在 DBM 中如何工作?

c# - EPPlus - 从 csv 文件生成 xlsx 文件时为 'Table Table1 Column Type does not have a unique name'

php - 从 PHP 版本 7.2.0 开始, "Array dereferencing"如何处理 boolean/integer/float/string 类型的标量值?