Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            ListaDeEnteros lista1 = new ListaDeEnteros();

            for (int i = 1; i <= 10; i++)
            {
                lista1.Agregar(i);
            }
            foreach (int i in lista1)
            {
                Console.Write(i + "-");
            }
            Console.WriteLine();
            ListaDeEnteros lista2 = lista1.Seleccionar(n => n % 2 == 0);
            ListaDeEnteros lista3 = lista2.Aplicar(n => n * 5);
            ListaDeEnteros lista4 = lista1.Seleccionar(n => n > 7).Aplicar(n => n + 10);
            ListaDeEnteros lista5 = ListaDeEnteros.Combinar(lista3, lista4, (x, y) => x + y);

            lista1.Imprimir();
            lista2.Imprimir();
            lista3.Imprimir();
            lista4.Imprimir();
            lista5.Imprimir();
            ListaDeEnteros.Combinar(lista5, lista3, (x, y) => x + 2 * y).Imprimir();

            Console.ReadKey();
        }
Ejemplo n.º 2
0
        //Igual que arriba, este método recibe un método que agregará los elementos resultantes.
        public ListaDeEnteros Aplicar(Aplicador f)
        {
            ListaDeEnteros listaAux = new ListaDeEnteros();

            foreach (int numero in lista)
            {
                listaAux.Agregar(f(numero));
            }
            return(listaAux);
        }
Ejemplo n.º 3
0
        //Este es un método estático, que recibe 2 objetos ListaDeEnteros, y además un método que las combina
        public static ListaDeEnteros Combinar(ListaDeEnteros l1, ListaDeEnteros l2, Combinador f)
        {
            //Puedo tener listas de distinta cantidad de elementos, así que primero se chequea eso.
            //Se recorre la lista más larga, y mientras tenga elementos de las 2, invoco la función, sino, solo agrego el elemento que tenga.
            ListaDeEnteros listaAux = new ListaDeEnteros();

            if (l1.Cantidad >= l2.Cantidad)
            {
                for (int i = 0; i < l1.Cantidad; i++)
                {
                    listaAux.Agregar(i < l2.Cantidad ? f((int)l1.lista[i], (int)l2.lista[i]) : (int)l1.lista[i]);
                }
            }
            else
            {
                for (int i = 0; i < l2.Cantidad; i++)
                {
                    listaAux.Agregar(i < l1.Cantidad ? f((int)l2.lista[i], (int)l1.lista[i]) : (int)l2.lista[i]);
                }
            }
            return(listaAux);
        }
Ejemplo n.º 4
0
        //Este método recibe un método del tipo Seleccionador
        public ListaDeEnteros Seleccionar(Seleccionador f)
        {
            ListaDeEnteros listaAux = new ListaDeEnteros();

            foreach (int numero in lista)
            {
                if (f(numero))
                {
                    listaAux.Agregar(numero);
                }
            }
            return(listaAux);
        }