У меня есть класс чанка, и я хочу, чтобы он содержал ссылки (представленные идентификатором int) на объекты, которые занимают определенные координаты в чанке. Поскольку многие объекты не имеют столкновений, одна и та же позиция может быть занята несколькими объектами. Чанки имеют 2 измерения (x, y). Вот что я думал, чтобы добиться этого:
public class Chunk{
public List<int>[] objPresence;
}
Это сделает массив списков (в котором size = chunksizeX * chunksizeY), где индексом будут сглаженные координаты x, y и список будет содержать все объекты на этой позиции. (каждый int в списке будет моим идентификатором данного объекта)
Итак, чтобы найти, какие объекты в данный момент находятся в данной позиции, я бы сделал:
listOfObjectsOnPosition = objPresence[ flattenIndex(x,y) ];
Пока все хорошо, но теперь, если я хочу проверить, находится ли один из указанных c объектов в определенной позиции, мне нужно перебрать список, и я хотел бы иметь доступ к нему O (1).
Итак, вот альтернатива с использованием словаря:
public class Chunk{
public Dictionary<int,byte>[] objPresence;
}
и для доступа, чтобы найти определенный объект:
objPresence[ flattenIndex(x,y) ].ContainsKey(objToSearch)
Я также могу перебирать ключи словаря, если я просто хочу получить все объекты в позиции.
Однако в этом методе, поскольку я использую Dictionary, а ключ int является идентификатором объекта, значение байта в словаре тратит память, так как мне это значение ни для чего не нужно .
Есть ли способ реализовать то, что у меня здесь, без этого потраченного впустую байта, или есть другой, лучший способ сделать это вообще?
Спасибо!