es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

groovy/katalon: Validar secuencia de lista

Tengo dos listas:


def listA = ['2', '3', '4.5', '5', '6.5', '7', '7.5', '8']
def listB = ['10', '11', '13', '1', '2', '2.5']

Quiero validar la secuencia de ambas listas. Para listA, cada elemento actual es menor que el siguiente, por lo que tengo el siguiente bucle para eso:


double previous = 0.0
for (int i = 0; i < listA.size(); i++) {
double current = Double.parseDouble(listA.get(i))
if (previous >= current) {
KeywordUtil.markFailed('previous=${previous}, current=${current} not in order')
}
previous = current
}

El código anterior funciona correctamente para listA.

Pero estoy atascado en cómo validar la segunda lista. El requisito es que desde 10 – 13.5, los elementos deben estar en secuencia, pero después de 13.5, debe estar el ‘1’.

La listaB es dinámica. A veces sería ['11.5', '2', '3'] y a veces ['12', '2'] u otra combinación. Sea cual sea la lista, siempre debe seguir la secuencia de 10-13.5 y luego 1-3.

Actualización:
Voy a tratar de explicar los requisitos un poco mejor. Básicamente estoy probando la secuencia de tallas de un producto mostrado en la imagen.

Requirement

Así que estoy probando diferentes sitios y se prueban diferentes productos. Cada producto tendría disponibilidad de tallas diferente. La mayoría de los productos tendrían las tallas en secuencia numérica, como que la talla actual sería menor que la siguiente. Para ellos, el bucle for anterior funcionaría.

Pero para ciertas categorías como “Little Kids”, el requisito es que las tallas deben estar en el orden -> 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 1, 1.5, 2, 2.5, 3. Ahora, algunos de estos productos podrían faltar algunas tallas, pero las tallas disponibles deben seguir el orden mencionado anteriormente. Por ejemplo, si hay disponibles las tallas 12 y 2, deben estar en ese orden, no 2 y 12. De manera similar, si hay disponibles las tallas 13, 1 y 3, deben estar en ese orden, no 1, 3, 13.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para validar la secuencia de la lista B, podemos usar un enfoque similar al de la lista A. Podemos dividir la lista en dos partes: la parte que debería estar ordenada (10-13.5) y la parte que debería estar al final (1-3). Luego, podemos verificar si cada parte está ordenada por separado.

    Aquí hay un ejemplo de implementación:

    // Dividir la lista B en dos partes: la parte ordenada y la parte al final
    List<string> parteOrdenada = listB.subList(0, 4);
    List<string> parteFinal = listB.subList(4, listB.size());
    
    // Verificar si la parte ordenada está en secuencia
    double anterior = 9.5;
    for (int i = 0; i < parteOrdenada.size(); i++) {
        double actual = Double.parseDouble(parteOrdenada.get(i));
        if (anterior >= actual) {
            KeywordUtil.markFailed("anterior=${anterior}, actual=${actual} no está en orden");
        }
        anterior = actual;
    }
    
    // Verificar si la parte al final está en secuencia
    anterior = 0.0;
    for (int i = 0; i < parteFinal.size(); i++) {
        double actual = Double.parseDouble(parteFinal.get(i));
        if (!(actual >= 1 && actual <= 3)) {
            KeywordUtil.markFailed("actual=${actual} no está en el rango [1,3]");
        }
        if (anterior >= actual) {
            KeywordUtil.markFailed("anterior=${anterior}, actual=${actual} no está en orden");
        }
        anterior = actual;
    }
    

    En esta implementación, primero dividimos la lista en dos partes usando el método subList. Luego, verificamos si la parte ordenada está en secuencia iterando a través de ella y comparando cada elemento con el anterior. Utilizamos una variable anterior para llevar un registro del elemento anterior.

    A continuación, verificamos si la parte al final está en secuencia. Primero verificamos si cada elemento está en el rango [1, 3] usando una simple comprobación de rango. Luego, iteramos a través de la parte y comparamos cada elemento con el anterior usando el mismo enfoque que antes.

    Ten en cuenta que esta implementación asume que la lista B siempre contiene al menos un elemento en cada parte (10-13.5 y 1-3). Si ese no es el caso, deberás agregar comprobaciones adicionales para manejar esos casos.

Comments are closed.