diff --git a/src/blackmisc/aviation/atcstationlist.cpp b/src/blackmisc/aviation/atcstationlist.cpp index 87253879f..4d2741163 100644 --- a/src/blackmisc/aviation/atcstationlist.cpp +++ b/src/blackmisc/aviation/atcstationlist.cpp @@ -138,5 +138,25 @@ namespace BlackMisc stations.sortByAtcSuffixSortOrderAndDistance(); return stations; } + + QHash CAtcStationList::splitPerSuffix(bool sort) const + { + if (this->isEmpty()) { return QHash(); } + const CAtcStationList stations = sort ? this->sortedByAtcSuffixSortOrderAndDistance() : * this; + + QString suffix; + QHash split; + for (const CAtcStation &s : stations) + { + const QString currentSuffix = s.getCallsignSuffix(); + if (suffix != currentSuffix) + { + suffix = currentSuffix; + split[currentSuffix] = CAtcStationList(); + } + split[currentSuffix].push_back(s); + } + return split; + } } // namespace } // namespace diff --git a/src/blackmisc/aviation/atcstationlist.h b/src/blackmisc/aviation/atcstationlist.h index 8549c5241..76cb7c28e 100644 --- a/src/blackmisc/aviation/atcstationlist.h +++ b/src/blackmisc/aviation/atcstationlist.h @@ -24,6 +24,7 @@ #include "blackmisc/variant.h" #include +#include namespace BlackMisc { @@ -81,6 +82,10 @@ namespace BlackMisc //! Sorted by ATC suffix sort order and distance CAtcStationList sortedByAtcSuffixSortOrderAndDistance() const; + + //! Split per suffix + //! \remark sort can be disabled if already sorted + QHash splitPerSuffix(bool sort = true) const; }; } //namespace } // namespace