我在一個類中有一個自定義類串列
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; }
//....
}
在我的表格中,我有: 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 };
}
之后 : Image Third = Layers[2].Images[1].Image;
之后 :Image Third = Layers[2].Images[2].Image;
當第三個影像回圈全部完成后,它將開始執行第二個回圈。
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;
它應該從圖層串列中的每個圖層獲取 1 個影像并回傳一個影像串列。我找不到獲得所有組合的任何解決方案。你能幫助我嗎?
我的目標是什么
uj5u.com熱心網友回復:
您可以使用此方法來實作您想要的:
public static IEnumerable<CustomImage[]> GetCombinations(List<Layer> input)
{
int[] factors = new int[input.Count 1];
factors[factors.Length - 1] = 1;
for(int i = factors.Length - 2; i >= 0; i--)
{
factors[i] = factors[i 1] * input[i].Images.Count;
}
int max = factors[0];
for(int j = 0; j < max; j )
{
CustomImage[] result = new CustomImage[input.Count];
for(int i = 0; i < input.Count; i )
{
result[i] = input[i].Images[j / factors[i 1] % input[i].Images.Count];
}
yield return result;
}
}
在第一步中,我們填充一個名為 factor 的陣列。陣列的最后一個元素將為 1。然后從后面填充陣列。每個元素是下一個元素與具有相同索引的圖層的影像數量的乘積。例如,如果我們有包含 2、2 和 3 個影像的三層,則元素將從后面:
- 1(固定為最后一個元素)
- 3*1 = 3(最后一層有三張圖片)
- 2*3 = 6(最后一層前一層有兩張圖片)
- 2*6 = 12(該層之前的層又有兩個影像)
該陣列的第一個元素是所有層的所有影像數量以及組合數量的乘積。
我們設定了一個回圈,它將產生所有組合。我們從每一層取一張影像。每層內的指數可以通過除以下一個因子,然后對層的影像數量進行模除來計算。
在線演示:https : //dotnetfiddle.net/jhk18u
uj5u.com熱心網友回復:
@Hebele Hübele,正如@Liam 所建議的那樣。你需要兩個 for 回圈:
var imageArray = new Image[1];
//loop the layers
foreach (var layer in layers) {
//and for each layer loop images
foreach (var imgObject in layer.Images) {
imageArray.Append(imgObject.Image)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/389970.html
下一篇:C#方法多載和介面
