Есть ли более чистый способ предоставить доступ к списку в виде словаря? - PullRequest
4 голосов
/ 27 мая 2020

У меня есть класс чанка, и я хочу, чтобы он содержал ссылки (представленные идентификатором 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 является идентификатором объекта, значение байта в словаре тратит память, так как мне это значение ни для чего не нужно .

Есть ли способ реализовать то, что у меня здесь, без этого потраченного впустую байта, или есть другой, лучший способ сделать это вообще?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...