我正在努力解决这个问题,但基本上是尝试从{{1}的数字值创建例如1-200
,201-400
,401-53
的批量列表}。
到目前为止,我可以将数字453
拆分为453
,200
,200
的列表,这基本上告诉我需要创建3个批次。
但是,我不确定如何创建批次?
这是我创建堆栈的代码
53
有什么建议吗?
答案 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();
}
}