факт, что у вас есть эти два небольших целочисленных значения, которые объединяются, чтобы что-то означать (по крайней мере, цвет), предлагает мне, что для вас может быть смысл иметь структуру, предназначенную для инкапсуляции м.
Преимущество этого в том, что вы можете использовать структуру как ключ к словарю: методы Equals и GetHashCode должны уже работать адекватно.
Ниже приведен пример. Поскольку вы упомянули, что цвета не могут быть рассчитаны, я оставил комментарий, в котором должен быть заполнен словарь; вы можете сделать это жестко, но в идеале вы будете читать значения из файла или встроенного ресурса.
EDIT: обновленный мой пример struct является неизменным.
struct MyStruct
{
private byte _X;
private byte _Y;
public MyStruct(byte x, byte y)
{
_X = x;
_Y = y;
}
public byte X { get { return _X; } }
public byte Y { get { return _Y; } }
private static Dictionary<MyStruct, Color> _ColorMap;
static MyStruct()
{
_ColorMap = new Dictionary<MyStruct, Color>();
// read color mapping from somewhere...perhaps a file specific to the type of LED
}
public Color GetColor()
{
return _ColorMap[this];
}
}
Если вы идете по маршруту массива, многомерный или неровный массив, безусловно, лучше, чем внедрение множителя вручную. Единственными минусами являются незначительные подсчеты для проверки правильности отображения и нулей, если требуется разреженное сопоставление. –
Это действительно все, что мне нужно для моих целей, но мне также нравится предложение Мэтью. К сожалению, я работаю.NET 3.5, который не поддерживает класс Tuple. Спасибо вам всем. – Nate