06.10.2012, 21:06
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Упс, похоже я в первый раз таки неправильно понял задачу
Сообщение от pikko
|
при этом не перебирая их все ( это долго ).
|
Альтернатива - создание индекса.
все остальное - лишь вариации и комбинации на тему.
|
|
07.10.2012, 00:55
|
|
司会
|
|
Регистрация: 29.02.2012
Сообщений: 198
|
|
Но какой индекс можно создать для всех возможных регулярок? че за бред? или я что то не пони. В ЛЮБОМ СЛУЧАЕ. держишь ключи в виде строк в массиве.
потом делаешь фильтр по этому массиву и отбираешь только те под которые подойдет регулярка. что тут сложного и долгого?
это моментально делается, какой нахрен индекс! Плюс индекс тут не сделаешь даже при желании.
function regExpFilterKeys( object, regExpFilter ) {
return Object.keys( object ).filter( function ( key ) {
return regExpFilter.test( key )
} )
}
Последний раз редактировалось Maxmaxmахimus, 07.10.2012 в 01:21.
|
|
07.10.2012, 09:08
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от Maxmaxmахimus
|
Но какой индекс можно создать для всех возможных регулярок?
|
А нужно ли делать именно для всех?
Вот автор уже вроде какой-то индекс себе составил, и приведенная им регулярка очень располагает к индексированию.
Сообщение от Maxmaxmахimus
|
В ЛЮБОМ СЛУЧАЕ. держишь ключи в виде строк в массиве
|
Кроме тех случаев, когда нужен только конкретный тип регулярки)
Например для автокомплита как раз нужно ориентироваться по ключам, и применят регулярку по первым символам
Сообщение от Maxmaxmахimus
|
это моментально делается, какой нахрен индекс!
|
Не так уж моментально, ведь элементов у автора тысячи.
Но если такой перебор будет проводится только один раз в ответ на действие пользователя, то да, время будет более чем приемлимо
|
|
07.10.2012, 14:53
|
|
Аспирант
|
|
Регистрация: 06.10.2012
Сообщений: 60
|
|
я уже сам не понимаю кто из вас неправильно меня понял
допустим есть такой хеш:
h={
'аня':[4,6,7,68],
'вова':[3,,53,55],
'вася':[,3,34,344],
'ваня':[34,34,34,],
'петя':[35,5,5,45]
}
я хочу сказать как-то так:
r = h[ /^в/ ];
и получить:
r={
'вова':[3,,53,55]
'вася':[,3,34,344]
'ваня':[34,34,34,]
}
но вообщем, я догадываюсь что это бывает только во сне
|
|
07.10.2012, 14:55
|
|
司会
|
|
Регистрация: 29.02.2012
Сообщений: 198
|
|
или с базой данных)
Сообщение от pikko
|
но вообщем, я догадываюсь что это бывает только во сне
|
тебе функцию написать что ли О_О ?
function filterKeys ( object, regExp ) {
var filteredKeys = Object.keys( object ).filter( function ( key ) {
return regExp.test( key )
} );
var obj = {};
for ( var i = 0; i < filteredKeys.length; i++ ) {
var key = filteredKeys[i];
obj[key] = object[key]
}
return obj
}
IE > 8
Последний раз редактировалось Maxmaxmахimus, 07.10.2012 в 15:04.
|
|
07.10.2012, 15:49
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от pikko
|
я уже сам не понимаю кто из вас неправильно меня понял
допустим есть такой хеш:
h={
'аня':[4,6,7,68],
'вова':[3,,53,55],
'вася':[,3,34,344],
'ваня':[34,34,34,],
'петя':[35,5,5,45]
}
я хочу сказать как-то так:
r = h[ /^в/ ];
и получить:
r={
'вова':[3,,53,55]
'вася':[,3,34,344]
'ваня':[34,34,34,]
}
но вообщем, я догадываюсь что это бывает только во сне
|
можно использовать обёртку, которая будет использовать бинарное дерево в качестве хранилища.
но легче решить эту задачу, просто убрав её нет трёхтысячного массива - нет проблемы (выборка нужных ключей с помощью БД, например)
|
|
07.10.2012, 16:03
|
|
Аспирант
|
|
Регистрация: 06.10.2012
Сообщений: 60
|
|
хм...
вообщем, я решил не строить догадки, а посмотреть на реальное время необходимое для перебора 3300 записей...
в зависимости от регекспа и количества подходящих записей время оказалось < 4ms.
это замечательно.
а сподвигло меня на эксперимент то, что я пока не совсем понимаю ооп
и я решил проверить oo вариант Maxmaxmахimus'a:
var filteredKeys = Object.keys( object ).filter( function ( key ) {
return regExp.test( key )
} );
vs
просто:
var filteredKeys = [];
for ( var key in object ) { if ( regExp.test( key ) ) filteredKeys.push( key )}
время одинаково.
вообщем,
всем огромное спасибо
и, да, про бинарное дерево я пока не слышал, обязательно почитаю.
Последний раз редактировалось pikko, 07.10.2012 в 16:05.
|
|
07.10.2012, 19:39
|
|
司会
|
|
Регистрация: 29.02.2012
Сообщений: 198
|
|
в ишаке 8 моих функций нет, но их можно эмулировать заплатками
|
|
|
|