Абсолютно быстрый способ поиска целочисленных значений в C # - с помощью массива. Это будет предпочтительнее использования словаря, может быть, если вы пытаетесь делать десятки тысяч поисков одновременно. Для большинства целей это излишне; скорее всего вам нужно оптимизировать время разработчика, а не время процессора.
Если зарезервированные ключи - это не просто все ключи, которых нет в таблице поиска (т. Е. Если поиск ключа может вернуть найденное значение, статус не найден или зарезервированный статус), вам потребуется сохранить зарезервированные ключи где-нибудь. Сохранять их как записи словаря с магическими значениями (например, ключ любой записи словаря, значение которой равно null, зарезервировано) можно, если вы не пишете код, который перебирает записи словаря без их фильтрации.
Чтобы решить эту проблему, используйте отдельный HashSet<int>
для хранения зарезервированных ключей и, возможно, запекайте все это в классе, например ::
.
public class LookupTable
{
public readonly Dictionary<int, string> Table { get; }
public readonly HashSet<int> ReservedKeys { get; }
public LookupTable()
{
Table = new Dictionary<int, string>();
ReservedKeys = new HashSet<int>();
}
public string Lookup(int key)
{
return (ReservedKeys.Contains(key))
? null
: Table[key];
}
}
Вы заметите, что это все еще имеет проблему с магическим значением - Lookup
возвращает ноль, если ключ зарезервирован, и выдает исключение, если его нет в таблице, - но, по крайней мере, теперь вы можете перебрать Table.Values
без фильтрации магических значений.