2017-06-20 167 views
0

我有一个列表。将另一个列表中的对象分配给另一个列表组

public List<Objects> obj; 

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

public List<Objects> objGroup1, objGroup2, objGroup3, objGroup4; 

我给它们现在做这个。

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。组2获得对象5-8等等......

有没有人有更好的方法来分组这样的对象?

回答

3

您可以利用SkipTake方法。

你需要的using System.Linq;

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(); 

让,我知道,如果它的作品,因为我不能现在就测试它,除了语法。

你也可以组Take()obj之前,如

var orderedobj = obj.OrderBy(i => "some order criteria").ToList(); 
objGroup1 = orderedobj.Take(4); 
... 

我引用上How to get first N elements of a list in C#?我的答案。

编辑:

如果你莫名其妙不想使用Linq,你也可以使用GetRange

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); 
+0

上午有皈依问题。 –

+0

啊,我看到了评论(现在消失)要求没有Linq的答案,所以我添加了一些编辑到我的答案。无论如何,你能指定你看到什么样的转换错误吗? –

+0

我想我知道这个问题,最后只需要一个ToList()。 –

0

使用Keyur的出色答卷,您可以创建,将创建组的方法对于你,根据任何来源列表,具有可配置的组大小:

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; 
} 

用法

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(); 
} 

输出

enter image description here

相关问题