首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将另一列表中的对象分配给另一组列表

将另一列表中的对象分配给另一组列表
EN

Stack Overflow用户
提问于 2017-06-20 04:34:14
回答 2查看 51关注 0票数 0

我有一份清单。

代码语言:javascript
复制
public List<Objects> obj;

此列表中的对象需要添加到这些其他列表中。

代码语言:javascript
复制
public List<Objects> objGroup1, objGroup2, objGroup3, objGroup4; 

我现在就给他们分配这个。

代码语言:javascript
复制
void AssignToGroups()
{
    for(int i = 0; i < obj.Count ; i++)
    {
//Need the first 4 for group 1 next 4 for group 2 and so on...

        if(i < 4)
        {
            objGroup1.Add(obj[i]);
        }

        else if(i >= 4 && i < 8)
        {
            objGroup2.Add(obj[i]);
        }

        else if (i >= 8 && i < 12)
        {
            objGroup3.Add(obj[i]);
        }

        else if (i >= 12 && i < 16)
        {
            objGroup4.Add(obj[i]);
        }
    }
}

我正在计划展开,我现在对对象进行分组的方法将使我的屏幕上充满没完没了的if和else语句。

每个组需要分配4个对象。组中的对象按照它们的排列顺序得到它们。例如,group1得到obj 1-4。第二组5-8,等等.

有谁有更好的方法来分组这样的对象吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-20 04:41:36

您可以使用跳过拿走方法。

你需要using System.Linq;

代码语言:javascript
复制
objGroup1 = obj.Take(4).ToList();           //edited: use ToList() to keep the list format
objGroup2 = obj.Skip(4).Take(4).ToList();
objGroup3 = obj.Skip(8).Take(4).ToList();    
objGroup4 = obj.Skip(12).Take(4).ToList();
objGroup5 = obj.Skip(16).Take(4).ToList();

让我知道它是否工作,因为我现在无法测试它,除了语法。

还可以在obj之前对Take()进行分组,如

代码语言:javascript
复制
var orderedobj = obj.OrderBy(i => "some order criteria").ToList();
objGroup1 = orderedobj.Take(4);
...

我在如何在C#中获得列表的第一个N个元素?上引用了我的答案。

编辑:

如果您不想使用Linq,也可以使用GetRange

代码语言:javascript
复制
objGroup1 = obj.GetRange(0, 4);
objGroup2 = obj.GetRange(3, 4);     //since GetRange(index, count) has index starting from 0 instead of 1
objGroup3 = obj.GetRange(7, 4);     //count stays the same since we always want 4 elements
objGroup4 = obj.GetRange(11, 4);
objGroup5 = obj.GetRange(15, 4);
票数 3
EN

Stack Overflow用户

发布于 2017-06-20 05:05:48

使用Keyur的出色答案,您可以创建一个方法,该方法将根据任何源列表为您创建组,并具有可配置的组大小:

代码语言:javascript
复制
private static List<List<object>> AssignToGroups(List<object> source, int groupSize)
{
    var groups = new List<List<object>>();

    if (source == null || groupSize < 1) return groups;

    for (int i = 0; i < source.Count / groupSize; i++)
    {
        groups.Add(source.Skip(groupSize * i).Take(groupSize).ToList());
    }

    return groups;
}

使用

代码语言:javascript
复制
private static void Main()
{
    var mainList = new List<object>
    {
        "one", "two", "three", "four","five",
        "six","seven","eight","nine","ten",
        "eleven", "twelve", "thirteen", "fourteen","fifteen",
        "sixteen","seventeen","eightteen","nineteen","twenty",
        "twentyone", "twentytwo", "twentythree", "twentyfour","twentyfive",
        "twentysix","twentyseven","twentyeight","twentynine","thirty",
        "thirtyone", "thirtytwo", "thirtythree", "thirtyfour","thirtyfive",
        "thirtysix","thirtyseven","thirtyeight","thirtynine","forty",
    };

    var groups = AssignToGroups(mainList, 4);

    for (var i = 0; i < groups.Count; i++)
    {
        Console.WriteLine($"Group #{i + 1}: {string.Join(", ", groups[i])}");
    }

    Console.WriteLine("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}

输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44643898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档