PDA

Ver la Versión Completa : TMatch o TMatchCollection


avechuche
14-07-2013, 04:58:56
Gente alguien me puede explicar, lo mas detallado posible, cuales son las diferencias entre TMatch y TMatchCollection, porque no se cual usar y en que circunstancias. Gracias!

Casimiro Notevi
14-07-2013, 10:11:42
Lo mismo digo una tontería, pero se puede comparar con: TMoto, TMotoCollection. En el primer caso tienes una moto, en el segundo tienes una colección de motos y puedes elegir una de ellas, ordenarlas por color, precio, cilindrada, etc.
Aunque lo mismo estás preguntando para qué sirven, no ha quedado muy clara tu duda.

avechuche
15-07-2013, 00:12:49
Si no me explique bien porque no puse un ejemplo. Seria asi ...
// HTML es un string con código HTML.
aHotfixWebName := TRegEx.Match(HTML, codeStringRegExpHotfix);

if aWebFolderName.Success then
begin
// Codigo que se inicializa una vez si se encuentra al menos una coincidencia.
while aWebFolderName.Success do
begin
// Codigo por aquí
...
aHotfixWebName := aHotfixWebName.NextMatch;
end;
end;

Bueno de esa forma obtengo todas las coincidencias, pero no entiendo que hace el .NextMatch.
1) ¿Cada vez que lo llamo busca en la cadena la siguiente coincidencia?
1a) ¿Desde el principio de la cadena o desde la posicion donde encontro la anterior coincidencia?
1b) Si es asi, ¿seria más lento que usar TMatchCollection?
2) ¿Ó cuando se llama por primera vez a la ER crea un "array" y el .NextMatch lo recorre?

Lo que puede observar es que TMatchCollection devuelve una coleccion que puede ser recorrida de forma iterativa y obtener los resultados mediante un indice, cosa que con TMatch no se puede.

No se si habra algo mas por lo cual me convenga usar uno u otro.

Otra cosa, se puede pasar un TMatchCollection a un array de forma directa? O no es necesario, el uso que le tengo que dar es solo de lectura, no tengo que reemplazar nada, por eso no si me conviene usar directamente el TMatchCollection o pasarlo a un array.

Lepe
15-07-2013, 13:26:39
TMatchCollection es una lista de objetos, cada objeto es un TMatch, ni más ni menos. No le des más vueltas o acabarás mareado ;).

El TMatchCollection es ya "un array". De hecho, los arrays es lo que se usaba antes, hoy día son todo Listas de objetos (TObjectList) y Colecciones (TCollection).

Vaaaale, los arrays puedes seguir usándolos, pero intenta ordenar un array (casi de locos) cuando un derivado de TCollection/TObjectList ya lo tienes todo hecho (solo implementa una función y se la pasas al método Sort).