Mensajes: 1,364
Temas: 193
Gracias Recibidas: 320 en 238 posts
Gracias Dadas: 236
Registro en: Jul 2020
02-09-2022, 14:38
(Última modificación: 02-09-2022, 14:41 por
tincho.)
Hola.
En el ejemplo de mas abajo hay una colección de recetas llamadas R1 y R2 pero imaginen que son miles.
Luego hay una lista String[] que en un loop va cambiando los integrantes y en cada pasada deseo saber si la lista "temporal" de ingredientes coincide con alguna "receta" de la colección, es decir si los ítemes de la lista String[] coinciden con los indices de la colección secundaria R1 R2 ... Rn.
GAMBAS
cRecipes["R1"] = ["tomate": 400, "harina": 1000, "sal": 12, "levadura": 42, "agua": 400]
cRecipes["R2"] = ["harina": 5000, "sal": 12, "levadura": 42, "agua": 400]
aRecipes = ["tomate", "harina", "sal", "levadura", "agua"]
...
aRecipes = ["cebolla", "sal", "tomate", "aceite"]
...
aRecipes = ["ingrediente-1", "ingrediente-2", "ingrediente-n"]
Deseo saber si existe coincidencia 100% o un porcentaje, por ejemplo la receta del "pan" coincidiría con la receta de la pizza en algunos de sus ingredientes (las cantidades de momento no me interesan).
¿Cómo lo harían?
1 Saludo.
Mensajes: 1,116
Temas: 121
Gracias Recibidas: 402 en 269 posts
Gracias Dadas: 431
Registro en: Jul 2020
Entiendo lo que quieres hacer y sin entrar a responder a tu pregunta apunto lo que yo haría:
El recetario estará guardado en
a) una base de datos -> deja que sea la BBDD la que decida vía SQL
o
b) una serie de archivos txt, csv, json o lo que sea. -> haz la comparación vía funciones de cadena sobre el texto "a lo bruto" directamente.
La solución b es muy tosca, pero debería ser más rápida pues te ahorra todo el mecanismo file a collection a función de búsqueda.
Saludos
No podemos regresar
Los siguientes 1 usuarios dice gracias a Shordi por este post:1 usuarios dice Gracias! a Shordi por este post
• tincho
Mensajes: 147
Temas: 2
Gracias Recibidas: 107 en 70 posts
Gracias Dadas: 8
Registro en: Jul 2020
¿Ayuda esto?
GAMBAS
cRecipes["R1"] = ["tomate": 400, "harina": 1000, "sal": 12, "levadura": 42, "agua": 400]
cRecipes["R2"] = ["harina": 5000, "sal": 12, "levadura": 42, "agua": 400]
Search(["tomate", "harina", "sal", "levadura", "agua"])
Search(["cebolla", "sal", "tomate", "aceite"])
Search(["ingrediente-1", "ingrediente-2", "ingrediente-n"])
Search(["harina", "sal", "levadura", "agua"])
iMatch = 0
iLen = cRecipes[sCol].Count
Print Str(iMatch
) & " de " & Str(iLen
) & " = " & Str((iMatch
/ iLen
) * 100) & "%"
Resultados: -
R1 - 5 de 5 = 100%
R2 - 4 de 4 = 100%
R1 - 2 de 5 = 40%
R2 - 1 de 4 = 25%
R1 - 0 de 5 = 0%
R2 - 0 de 4 = 0%
R1 - 4 de 5 = 80%
R2 - 4 de 4 = 100%
Los siguientes 2 usuarios dicen gracias a cogier por este post:2 usuarios dicen Gracias! a cogier por este post
• Shell, tincho
Mensajes: 1,364
Temas: 193
Gracias Recibidas: 320 en 238 posts
Gracias Dadas: 236
Registro en: Jul 2020
03-09-2022, 19:16
(Última modificación: 03-09-2022, 19:40 por
tincho.)
(03-09-2022, 18:18)cogier escribió: ¿Ayuda esto?
Creo que si, voy a probarlo pero por lo que veo soluciona el problema.
(02-09-2022, 19:13)Shordi escribió: a) una base de datos -> deja que sea la BBDD la que decida vía SQL
b) una serie de archivos txt, csv, json o lo que sea. -> haz la comparación vía funciones de cadena sobre el texto "a lo bruto" directamente.
Sí, es algo mixto, existe una base de datos (el recetario) en la que están las "recetas". Luego hay una serie de archivos de texto que contienen una o varias "recetas" que pueden coincidir o no con lo que esté en el recetario, pero en el caso que coincidan el algoritmo le asigna una "receta" del recetario y en caso que no, propone agregar la receta poniendo la información en un formulario para crearlas.
1 Saludo.
Mensajes: 1,364
Temas: 193
Gracias Recibidas: 320 en 238 posts
Gracias Dadas: 236
Registro en: Jul 2020
Cogier, funciona perfectamente, muchas gracias.
Hice un cambio en el orden de subcolecciones de cRecipes para que estén primero las colecciones con mas componentes, de modo que tengan prioridad en la comparación, ya que una vez asignada una receta base esos ítemes dejan de estar en la lista de comparación.
1 Saludo.