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.

Obtener todas las combinaciones posibles en C#

Tengo una lista de una clase personalizada dentro de otra clase

public class CustomImage
{ 
    public CustomImage(Image image, string Hash)
    {
        this.Image = image;
        this.HashCode = Hash;
    }
    public Image Image { get; set; }

    public string HashCode { get; set; }
}

public class Layer
{
    public List<customimage> Images { get; set; }

    public Layer(string folderPath)
    {
        //....
    }
    public string HashCode { get; set; }
    //....
}

Y dentro de mi formulario tengo: public List<layer> Layers = new List<layer>();

private Image[] Test()
{
    Image First = Layers[0].Images[0].Image;

    Image Second = Layers[1].Images[0].Image;

    Image Third = Layers[2].Images[0].Image;

    return new Image[] { First, Second, Third };
}

y luego: Image Third = Layers[2].Images[1].Image;

y luego: Image Third = Layers[2].Images[2].Image;

Cuando finalice el bucle de la tercera imagen, comenzará a hacer el segundo.

Image Second = Layers[1].Images[1].Image;
Image Third = Layers[2].Images[0].Image;
Image Second = Layers[1].Images[1].Image;
Image Third = Layers[2].Images[1].Image;

Debería obtener 1 imagen de cada capa en la lista de capas (Layers) y devolver una lista de imágenes (Image List). No pude encontrar ninguna solución para obtener todas las combinaciones. ¿Me puedes ayudar?

Lo que estoy buscando es una imagen similar a esta aquí.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener todas las combinaciones de imágenes de cada capa en la lista “Layers”, puedes usar bucles anidados para iterar a través de cada capa y cada imagen dentro de esa capa. Luego, puedes agregar cada combinación de imágenes a una lista y devolverla como un array.

    Aquí tienes una implementación de ejemplo del método “Test” que devuelve todas las posibles combinaciones de imágenes:

    “`C#
    private Image[] Test()
    {
    int numLayers = Layers.Count;
    int[] indices = new int[numLayers]; // array para realizar un seguimiento del índice actual para cada capa
    int totalCombinations = Layers.Select(l => l.Images.Count).Aggregate((a,b) => a * b); // calcular el número total de combinaciones
    List combinations = new List(totalCombinations);

    for (int i = 0; i < totalCombinations; i++)
    {
        Image[] currentCombination = new Image[numLayers];
    
        // obtener la combinación actual de imágenes
        for (int j = 0; j < numLayers; j++)
        {
            currentCombination[j] = Layers[j].Images[indices[j]].Image;
        }
    
        combinations.Add(currentCombination);
    
        // incrementar índices para la siguiente combinación
        for (int j = numLayers - 1; j >= 0; j--)
        {
            indices[j]++;
            if (indices[j] < Layers[j].Images.Count)
            {
                break;
            }
            indices[j] = 0;
        }
    }
    
    return combinations.ToArray();
    

    }
    “`

    Esta implementación utiliza un array “indices” para realizar un seguimiento del índice de la imagen actual para cada capa. También calcula el número total de combinaciones como el producto del número de imágenes en cada capa. Luego, recorre todas las combinaciones posibles incrementando los índices y obteniendo la imagen correspondiente para cada capa. Cada combinación se agrega a una lista, la cual se devuelve como un array.

    Ten en cuenta que esta implementación asume que todas las capas en la lista “Layers” tienen al menos una imagen. Si alguna capa no tiene imágenes, deberás manejar ese caso por separado.

Comments are closed.