根据该Object中变量的值拆分List <object>

时间:2017-04-03 11:02:06

标签: c# visual-studio

我试图将我的列表拆分成多个较小的列表,但不知道我应该怎么做。

List<Object> list = new List<Object>();

这是我的原始列表,其中包含Object对象。我试图根据此Object的变量拆分此列表。

示例:

public class Object {
   string var1;
   int var2;
   int var3;
}

假设列表对象有3个可能的var1(“是”,“否”,“可能”)然后我想要3个列表,其中每个列表都是具有“是”,“否”或“可能”的对象作为var1(这可以是100个对象的列表,每个对象都是这个字符串之一)(var1中的可能性不是恒定的)

4 个答案:

答案 0 :(得分:3)

在这里,您将拥有对象的拆分列表。你可以根据你班级的财产使用小组。类似的东西。

var splittedList = list.GroupBy(c=>c.var1).Select(c => c.ToList()).ToList() ;

这里splittedList的类型为List<List<YourObject>>因此对于您的Yes, No, MayBe情况,它将返回3个列表的列表。这三个中的每一个都包含具有相同var1属性

的对象

答案 1 :(得分:2)

查看ILookup

var splitted = list.ToLookup(item => item.var1);

答案 2 :(得分:1)

使用System.Linq:

List<Object> listYes = list.Where(o => o.var1 == "yes").ToList();
List<Object> listNo = list.Where(o => o.var1 == "no").ToList();
List<Object> listMaybe = list.Where(o => o.var1 == "maybe").ToList();

这将为您提供3个对象列表,其中var1等于Where()子句中的相应值。

答案 3 :(得分:0)

            List<Object> list1 = new List<Object>();
            List<Object> list2 = new List<Object>();

            for (int i=0;i<list.Count;i++)
            {
                if (list.var1 == 0)
                {
                    list1.Add(list[i]);
                }
                if (list.var1 == 1)
                {
                    list2.Add(list[i]);
                }

            }