Если бы ключи здания были уникальными, у вас был бы такой класс:
class Building
Key
Name
Height
YearBuilt
YearDemolished
И вы могли бы решить свою проблему с помощью простого цикла по коллекции зданий:
for each building
if (building.yearBuilt <= year && building.yearDemolished >= year)
{
// the building was standing during that year
}
Если ключи можно использовать повторно, вам все равно нужно хранить историческую информацию. Если вы держите его вместе со зданием, то у вас есть что-то вроде:
class HistoricalInfo
Name
Height
YearBuilt
YearDemolished
class Building
Key
HistoricalInfo[] // some collection (array, list, etc.)
И ваш цикл становится немного сложнее:
for each building
for each building.historyInfo
if (historyInfo.YearBuilt <= year && historyInfo.YearDemolished >= year)
{
// this instance of the key was standing during that year
}