Ich habe eine Funktion, die basierend auf der Bedingung eine von mehreren ähnlichen Listen zurückgibt. Der Code wird aus der Quelle Dictionary generiert, die die Daten enthält. Ich stelle den Generator nicht zur Verfügung, da sein Code trivial ist.
List GetList(int version)
{
var list = new List();
if (version == 1)
{
list.Add("A");
list.Add("B");
list.Add("C");
list.Add("D");
list.Add("E");
}
if (version == 2)
{
list.Add("A");
list.Add("B");
list.Add("B2");
list.Add("B3");
list.Add("C");
list.Add("D");
list.Add("E");
}
if (version == 3)
{
list.Add("A");
list.Add("B");
list.Add("B2");
list.Add("B3");
list.Add("D");
list.Add("E");
}
if (version == 11)
{
list.Add("A");
list.Add("B");
list.Add("B2");
list.Add("B3");
list.Add("C");
list.Add("D");
list.Add("E");
}
return list;
}
Es gibt also viel Code, der größtenteils doppelte Daten enthält. Oben ist nur ein kurzer Auszug.
Ich möchte, dass der generierte Code stattdessen so aussieht:
List GetList2(int version)
{
var list = new List();
list.Add("A");
list.Add("B");
if (version >= 2)
{
list.Add("B2");
list.Add("B3");
}
if (version = 11)
{
list.Add("C");
}
list.Add("D");
list.Add("E");
return list;
}
Ich brauche also einen Algorithmus, der die Quell-Dictionary-Informationen in eine Form umwandeln kann, die zum Generieren von GetList2 geeignet ist.Ich nehme an, dass die Methodensignatur so aussehen sollte (beachten Sie die Verwendung von IEquatable, die echten Listenmitglieder implementieren diese Schnittstelle, ich habe der Klarheit halber in der Frage Zeichenfolgen verwendet):
public class ListMerger
{
public static List Merge(Dictionary input) where T : IEquatable
{
throw new NotImplementedException();
}
}
public record VersionRange(int? MinVersion, int? MaxVersion);
public record VersionedChunk(List Data, List Versions) where T : IEquatable;
Auf Wunsch habe ich einige Unit-Tests für die Merge-Methode vorbereitet:
Ich habe eine Funktion, die basierend auf der Bedingung eine von mehreren ähnlichen Listen zurückgibt. Der Code wird aus der Quelle Dictionary generiert, die die Daten enthält. Ich stelle den Generator nicht zur Verfügung, da sein Code trivial ist. [code]List GetList(int version) { var list = new List(); if (version == 1) { list.Add("A"); list.Add("B"); list.Add("C"); list.Add("D"); list.Add("E"); } if (version == 2) { list.Add("A"); list.Add("B"); list.Add("B2"); list.Add("B3"); list.Add("C"); list.Add("D"); list.Add("E"); } if (version == 3) { list.Add("A"); list.Add("B"); list.Add("B2"); list.Add("B3"); list.Add("D"); list.Add("E"); } if (version == 11) { list.Add("A"); list.Add("B"); list.Add("B2"); list.Add("B3"); list.Add("C"); list.Add("D"); list.Add("E"); } return list; } [/code] Es gibt also viel Code, der größtenteils doppelte Daten enthält. Oben ist nur ein kurzer Auszug. Ich möchte, dass der generierte Code stattdessen so aussieht: [code]List GetList2(int version) { var list = new List(); list.Add("A"); list.Add("B"); if (version >= 2) { list.Add("B2"); list.Add("B3"); } if (version = 11) { list.Add("C"); } list.Add("D"); list.Add("E"); return list; } [/code] Ich brauche also einen Algorithmus, der die Quell-Dictionary-Informationen in eine Form umwandeln kann, die zum Generieren von GetList2 geeignet ist.Ich nehme an, dass die Methodensignatur so aussehen sollte (beachten Sie die Verwendung von IEquatable, die echten Listenmitglieder implementieren diese Schnittstelle, ich habe der Klarheit halber in der Frage Zeichenfolgen verwendet):[code]public class ListMerger { public static List Merge(Dictionary input) where T : IEquatable { throw new NotImplementedException(); } }
public record VersionRange(int? MinVersion, int? MaxVersion);
public record VersionedChunk(List Data, List Versions) where T : IEquatable; [/code] Auf Wunsch habe ich einige Unit-Tests für die Merge-Methode vorbereitet: [code][TestClass] public sealed class Test1 { [TestMethod] public void WhenNoVersions_ReturnEmptyList() { Dictionary input = [];
Assert.AreEqual(2, output[3].Data.Count); Assert.IsTrue(output[3].Data.SequenceEqual(["D", "E"])); Assert.AreEqual(0, output[3].Versions.Count); } } [/code] Links zu Lösungen in anderen Sprachen sind ebenfalls willkommen.
Ich habe eine Funktion, die basierend auf der Bedingung eine von mehreren ähnlichen Listen zurückgibt. Der Code wird aus der Quelle Dictionary generiert, die die Daten enthält. Ich stelle den...
Wenn ich Felder in meiner Datenbank namens Carmake und carbolour habe. Was passiert, ist, wenn ich Toyota eingeben kann, es gibt alle Toyota -Autos gut zurück. Wenn ich Blue einmachte, gibt es alle...