Название: QStringList Отправлено: Astrologer от Сентябрь 14, 2010, 12:16 Всем привет. У меня такая задача - есть QStringlist i1, в котором куча имен, содержащих префикс d_ и префикс s_ (например i1 = {d_table1, s_table1, d_re, s_re, ....}). Мне необходимо разбить этот лист на два QStringList'a, чтобы в одном были d_имена, а в другом s_имена. Наверное можно к ак то сделать с QRegExp, только я с ним не работал. Кто нибудь подскажите пожалуйста.
Название: Re: QStringList Отправлено: Sancho_s_rancho от Сентябрь 14, 2010, 12:30 Всем привет. У меня такая задача - есть QStringlist i1, в котором куча имен, содержащих префикс d_ и префикс s_ (например i1 = {d_table1, s_table1, d_re, s_re, ....}). Мне необходимо разбить этот лист на два QStringList'a, чтобы в одном были d_имена, а в другом s_имена. Наверное можно к ак то сделать с QRegExp, только я с ним не работал. Кто нибудь подскажите пожалуйста. А почему надо все усложнять?Пишешь for (по вкусу for_each) и для каждого элемента листа проверяешь первый символ. Если d - то сюда, если s - то туда. Название: Re: QStringList Отправлено: Astrologer от Сентябрь 14, 2010, 12:32 Код: for (int i = 0; i < i1.count() - 1; i++) Название: Re: QStringList Отправлено: Astrologer от Сентябрь 14, 2010, 12:33 Спасибо)) видимо перегрелся чуток))
Название: Re: QStringList Отправлено: BRE от Сентябрь 14, 2010, 12:33 Посмотри на QStringList::filter( ... ).
Название: Re: QStringList Отправлено: Kolobok от Сентябрь 14, 2010, 12:37 С QStringList::filter() придется два прохода делать. Но если это неважно...
QRegExp( "^d_*" ) Название: Re: QStringList Отправлено: Astrologer от Сентябрь 14, 2010, 12:45 Спасибо большое всем!!
Название: Re: QStringList Отправлено: m_ax от Сентябрь 14, 2010, 12:51 Код
Название: Re: QStringList Отправлено: Kolobok от Сентябрь 14, 2010, 12:53 "d_s_" ???
Название: Re: QStringList Отправлено: m_ax от Сентябрь 14, 2010, 13:01 Цитировать "d_s_" тогда так:Код
Название: Re: QStringList Отправлено: Astrologer от Сентябрь 14, 2010, 13:02 Код
Так быстрее?) К тому же, если имя, отличное от d_* или s_*, занесется в d_table. Название: Re: QStringList Отправлено: m_ax от Сентябрь 14, 2010, 13:08 Цитировать Так быстрее?) К тому же, если имя, отличное от d_* или s_*, занесется в d_table. Ну если вопрос ставился изначально, что все имена начинаются либо с s либо с d, то быстрее)Лучше конечно сравнивать с первым символом. Цитировать for (int i = 0; i < i1.count() - 1; i++) { QString string = i1; if (string.contains("s_")) s_tables.push_back(string); if (string.contains("d_")) d_tables.push_back(string); } А в Вашем варианте вы не до конца проходите список. И более того, если у вас прошло первое условие: if (string.contains("s_")) s_tables.push_back(string); то всё равно повторно будет произведён поиск на "d_". Зачем? Код
Название: Re: QStringList Отправлено: Astrologer от Сентябрь 14, 2010, 13:11 Да,согласен. Ваш вариант мне больше нравится. Его и оставлю. Исправил на
Код: for (int i = 0; i < all.count(); i++) Название: Re: QStringList Отправлено: Kolobok от Сентябрь 14, 2010, 13:42 В классе QString есть метод startsWith(...). Он и работает быстрее чем contains(...), и код станет читабельнее.
|