拆分列表<用户>在多个列表<用户>中在 c# 中

发布于 2024-12-09 12:18:28 字数 262 浏览 1 评论 0原文

我想将用户通用列表的列表拆分为每 5 条记录的小列表。

Ex

I have List: u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15.
so must be split into 
List1:u1,u2,u3,u4,u5
List2:u6,u7,u8,u9,u10
List3:u11,u12,u13,u14,u15

是否有可用的直接方法或需要 C# 中的编程逻辑?

I want to split List of user generic List into its small list with each 5 records.

Ex

I have List: u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15.
so must be split into 
List1:u1,u2,u3,u4,u5
List2:u6,u7,u8,u9,u10
List3:u11,u12,u13,u14,u15

Any direct method available or need programing logic in c# ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怎言笑 2024-12-16 12:18:28

您可以对索引进行分组:

List<List<User>> lists =
  list
  .Select((u, i) => new { List = i / 5, User = u })
  .GroupBy(g => g.List, g => g.User)
  .Select(g => g.ToList())
  .ToList();

您还可以使用 Range 进行循环并获取每次迭代的列表的一部分:

List<List<User>> lists =
  Enumerable.Range(0, (list.Count + 4) / 5)
  .Select(n => list.Skip(n * 5).Take(5).ToList())
  .ToList();

You can group on the index:

List<List<User>> lists =
  list
  .Select((u, i) => new { List = i / 5, User = u })
  .GroupBy(g => g.List, g => g.User)
  .Select(g => g.ToList())
  .ToList();

You can also use Range to make a loop and get a part of the list for each iteration:

List<List<User>> lists =
  Enumerable.Range(0, (list.Count + 4) / 5)
  .Select(n => list.Skip(n * 5).Take(5).ToList())
  .ToList();
古镇旧梦 2024-12-16 12:18:28

您可以使用 Skip(count) 和 Take(count) 方法。

You can Use Skip(count) and Take(count) methods.

不疑不惑不回忆 2024-12-16 12:18:28
// These are your objects, put here your init code
var list = Enumerable.Range(1, 20).ToList(); 

var lists = new List<int>[(list.Count + 4) / 5]; // The array of lists you wanted

for (int i = 0; i < lists.Length; i++)
{
    lists[i] = list.Skip(i * 5).Take(5).ToList();
}

(list.Count + 4) / 5 是一种向上舍入除法的方法(如果列表中有 6 个元素,我想要两个子列表)

如果您确实需要 List代码>列表...

var lists = new List<List<int>>((list.Count + 4) / 5);

for (int i = 0; i < lists.Capacity; i++)
{

    lists.Add(list.Skip(i * 5).Take(5).ToList());
}
// These are your objects, put here your init code
var list = Enumerable.Range(1, 20).ToList(); 

var lists = new List<int>[(list.Count + 4) / 5]; // The array of lists you wanted

for (int i = 0; i < lists.Length; i++)
{
    lists[i] = list.Skip(i * 5).Take(5).ToList();
}

The (list.Count + 4) / 5 is a method to round UP the division (if I have 6 elements in list, I want two sublists)

If you really need a List of List...

var lists = new List<List<int>>((list.Count + 4) / 5);

for (int i = 0; i < lists.Capacity; i++)
{

    lists.Add(list.Skip(i * 5).Take(5).ToList());
}
失退 2024-12-16 12:18:28

我认为这可能会更有效,因为您不进行分组、排序等操作。这只是对数据集的一次迭代。

var splitList= new List<IEnumerable<User>>();
List<User> currentList = null;
int count = 0;
foreach(var user in users)
{
    if (0 == count% 5)
    {
        currentList = new List<User>(5);
        returnValue.Add(currentList);
    }
    currentList.Add(key);
    count++;
}
return returnValue;

I think this might be more efficient since you're not doing groupings, orderings and such. This is just a single iteration over the dataset.

var splitList= new List<IEnumerable<User>>();
List<User> currentList = null;
int count = 0;
foreach(var user in users)
{
    if (0 == count% 5)
    {
        currentList = new List<User>(5);
        returnValue.Add(currentList);
    }
    currentList.Add(key);
    count++;
}
return returnValue;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文