将数组分解为小数组

leo*_*ora 3 c#

我发送电子邮件给人员列表.我有阵列中的收件人列表,但列表最多可以容纳500人.我的邮件服务器一次发送的收件人数量有限制(50个收件人)

所以,如果列表大于50,我需要将其分解为不同的邮件.

采用一个阵列并将其分解为50个数组的最佳方法是什么

例如:

如果数组是120长,我希望返回3个数组,一个50,另一个50,第三个20.

Jon*_*eet 8

您可以使用MoreLINQ中批处理操作:

Person[] array = ...;

var arrays = list.Batch(50).Select(x = x.ToArray());

foreach (Person[] shorterArray in arrays)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

(如果您IEnumerable<Person>对阵列感到满意,那么您Select当然不需要通话.)


Luc*_*ero 5

也许ArraySegment<T>适合你?你必须手动拆分它,但这在循环中并不难.

int recipient = 0;
while (recipient < recipients.Count) {
  ArraySegment<string> recipientSegment = new ArraySegment<string>(recipients, recipient, Math.Min(50, recipients.Count-recipient));
  // build your message here, using the recipientSegment for the names
  recipient += 50;
}
Run Code Online (Sandbox Code Playgroud)