Angenommen man verlegt Rohrleitungen und braucht mehrere, verschiedene Längen und hat mehrere Rohre gleicher Länge zur Verfügung.
Diese Methode kann eine Liste von Double Werten so verteilen, dass die Rohrlängen möglichst Effektiv verwendet werden können.
Ein anderes einsatzbeispiel ist das Auffüllen von Verpackungen aus verschiedenen Teilmengen.
//var lst = new List<double>(new double[] { 1, 1, 1, 2, 2, 3, 4, 4, 5, 8, 13, 21, 34 });
var lst = new List<double>(new double[] { 1, 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 });
Console.WriteLine("Given:");
Console.WriteLine(string.Join(", ", lst));
Console.WriteLine();
//Beispiel: Es sollen exakt 30 Tabletten in die Dose aus verschiedenen Teilmengen gepackt werden.
Console.WriteLine("Exact");
var x1 = lst.Combine(20, CombineMode.Exact).ToList();
Output(lst, x1);
//Beispiel: Es sollen bestimmte Rohrlängen aus festen Längen geschnitten werden.
Console.WriteLine("LessOrExact");
var x2 = lst.Combine(20, CombineMode.LessOrExact).ToList();
Output(lst, x2);
//Beispiel: Es sollen mindestens 500g aus mehreren Teilgewichten abgepackt werden.
Console.WriteLine("MoreOrExact");
var x3 = lst.Combine(20, CombineMode.MoreOrExact).ToList();
Output(lst, x3);
Console.ReadKey();