Ich versuche in meinem Projekt das zerlegen eines strings, der 2 Trennzeichen beeinhaltet, zu beschleunigen. Nur anscheinend ist mir das Gegenteil gelungen, und die benötigte Zeit wurde verdoppelt
(gemessen mit QTime, im Release Mode, nicht über VS gestartet).
Ein, zu zerlegender string, sieht in etwa so aus:
"12:0,15:2,25:4,"
Der Momentane Code sieht so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
void MapReader::_parseTileString(const Point<uint32> &pos, const QString &tileString, Layer layer)
{
QStringList tileObjectStrings = tileString.split(QRegExp("\\D?,\\D?")); // beliebig viele nicht digits, gefolgt von einem Komma, gefolgt von beliebig vielen nicht digits
QStringList::const_iterator itr = tileObjectStrings.begin();
for (uint32 x = 0; x < m_pMap->getSize().x && itr != tileObjectStrings.end(); ++x, ++itr)
{
int delimiterIndex = itr->indexOf(":");
MapTile tileObject(itr->left(delimiterIndex).toUInt(), itr->right(itr->length() -1 -delimiterIndex).toUInt());
m_pMap->setMapTile(Point3D<uint32>(x, pos.x, pos.y), tileObject, layer);
}
}
|
Meine Trennzeichen sind : und , (nur der Vollständigkeit halber). Hat jemand eine Idee, wie ich das besser optimieren könnte? Eine ähnliche Geschwindigkeit wäre dann schon wünschenswert
Der vorherige Code ist einfach nur scheußlich, und den würde ich ganz gerne weg haben, deswegen suche ich so versessen nach einer besseren Lösung.
PS: Um eventuellen Fragen vorzubeugen. Es geht mir tatsächlich nur um das Zerlegen. Der Rest (das Eintragen in die Map, usw) ist mit der vorherigen Lösung identisch.
EDIT: Nutze QT 4.8.1