从堆栈创建批次

时间:2018-04-05 12:00:05

标签: c# asp.net

我正在努力解决这个问题,但基本上是尝试从{{1}的数字值创建例如1-200201-400401-53的批量列表}。

到目前为止,我可以将数字453拆分为453200200的列表,这基本上告诉我需要创建3个批次。

但是,我不确定如何创建批次?

这是我创建堆栈的代码

53

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我创建了第二个名为CreateRanges()的方法,该方法产生您提供的输出,但从1开始的所有范围除外。每个范围应从零或一开始;在您的示例中,第一批实际上将有201个项目。

// Stacks: 200, 200, 53
// Ranges: <1,200>, <201,400>, <401,453>

void Main()
{
    var stacks = CreateStacks(453, 200);
    Console.WriteLine("Stacks: " + string.Join(", ", stacks.Select(n => n.ToString()).ToArray()));
    var ranges = CreateRanges(453, stacks);
    Console.WriteLine("Ranges: " + string.Join(", ", ranges.Select(t => $"<{t.Item1},{t.Item2}>").ToArray()));
    Console.WriteLine();
}

public static List<Tuple<int, int>> CreateRanges(Int32 number, List<int> stacks)
{
    var ranges = new List<Tuple<int, int>>();
    var index = 0;
    foreach (var stack in stacks){
        ranges.Add(new Tuple<int, int>(index + 1, stack + index));
        index += stack;
    }
    return ranges;
}

public static List<int> CreateStacks(Int32 number, Int32 stackSize)
{
    List<int> stacks = new List<int>();
    int d = number / stackSize;
    if (d == 0)
    {
        return stacks;
    }
    int r = number % stackSize;

    string str = string.Join(",", Enumerable.Repeat("200", d));
    if (number % 100 > 0)
    {
        str = str + ", " + r;
        foreach (var s in str.Split(',').ToList())
        {
            stacks.Add(Convert.ToInt32(s));
        }
    }
    return stacks;
}

答案 1 :(得分:0)

您可以使用for循环并确定计数是否已达到200,然后创建新的List。

int total = 453;
int batchCount = 200;
List<List<int>> batches = new List<List<int>>();

for (int i = 0; i < total; i++)
{
    if (i % batchCount == 0)
    {
        batches.Add(new List<int>());
    }

    batches[batches.Count -1].Add(i);
}

列表batches将包含3个int列表及所有数字。

答案 2 :(得分:0)

我的镜头,从字面上“创建一个批次列表”:

public enum Simple : byte
{
    one = 0x01,
    two = 0x02,
    three = 0x03
}

public class Foo
{
    public Enum Simple { get; set; }
}

public class Program
{
    static void Main(string[] args)
    {
        using (var writer = XmlWriter.Create(Console.OpenStandardOutput()))
        {
            try
            {
                var foo = new Foo
                {
                    Simple = Simple.three
                };
                var serializer = new XmlSerializer(foo.GetType());
                serializer.Serialize(writer, foo);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        Console.ReadLine();
    }
}

行动中:https://dotnetfiddle.net/oqFmv0