Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Optimizar código foreach

Iniciado por fernando, Abril 08, 2017, 10:42:10 AM

Tema anterior - Siguiente tema


Buenas ! Tengo 3 foreach,uno para buscar cuantas carpetas hay en un directorio,otro para buscar los png que hay y otro para buscar los exe que hay. El problema es que para buscar cada exe y luego png doi 36 vueltas ,como puedo arreglarlo?como puedo hacer que solo busque los archivos con esas extensiones y no valla comprobando toodos los archivos? Y como puedo hacer que busque png y jpg? y lo mismo con exe y lnk?
 


foreach (var juego in data.Juegos) {
    }
    //creamos los botones por cada carpeta que tengamos en Apps
    if (Directory.Exists(rutasapp)) {
        foreach (string dataApp in Directory.GetDirectories(rutasapp)) {
            GameObject button = Instantiate(buttonPrefab) as GameObject;
            button.transform.SetParent(layout);
            button.name = "Button" + layout.childCount;
            //buscamos todos los ficheos que sean .exe y los guardamos en data
            foreach (string data in Directory.GetFiles(@dataApp)) {
                if (Path.GetExtension(@data) == ".exe") {
                    //al clicar el boton ejecutamos el exe que hemos guardado anteriormente .NO FUNCIONA
                    button.GetComponent<Button>().onClick.AddListener(() => Process.Start(data));
                    UnityEngine.Debug.Log(data);
                }
                //buscamos todas las imagenes que sean .png y las guardamos en imagenes
                foreach (string imagenes in Directory.GetFiles(@dataApp)) {
                    if (Path.GetExtension(@imagenes) == ".png") {
                         string imgPath = imagenes;
                            //si no exite nos muestra el mensaje de error
                            if (!File.Exists(imgPath)) {
                                UnityEngine.Debug.LogError("File doesn't exist: " + imgPath);
                                return;
                            }

Utilizando system.linq podrías pre-filtrar la lista:
 
Directory.GetFiles(@dataApp).Where(s => s.EndsWith(".exe") || s.EndsWith(".png"));
 
 

Cita de: iRobb date=1491645989Utilizando system.linq podrías pre-filtrar la lista:
   
   
      Directory.GetFiles(@dataApp).Where(s => s.EndsWith(".exe") || s.EndsWith(".png"));
   
   
       
   


mmm gracias!! y como puedo poner abajo que sea .exe y .lnk? con || y luego detras que pongo?
 
if (Path.GetExtension(@data) == ".exe")

Cita de: iRobb date=1491645989Utilizando system.linq podrías pre-filtrar la lista:
   
   
      Directory.GetFiles(@dataApp).Where(s => s.EndsWith(".exe") || s.EndsWith(".png"));
   
   
       
   


Usar lambda para hacer un "foreach" interno tiene la misma carga... creo.

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



Etiquetas: