vrwim
vrwim

Reputation: 14260

Sort a List<T> into List<List<T>> based on type using Linq?

I want to "sort" (not sure if that's the right terminology) a List based on an enum value inside the objects, where the List returned contains multiple Lists, each containing objects with the same enum value.

ex:

class Obj {
    public MyEnum EnumVal { get; set; }
}

enum MyEnum {
    Val1, Val2, Val3
}

// Input
new List<Obj> {
    new Obj { EnumVal = MyEnum.Val1 },
    new Obj { EnumVal = MyEnum.Val1 },
    new Obj { EnumVal = MyEnum.Val2 },
    new Obj { EnumVal = MyEnum.Val3 },
    new Obj { EnumVal = MyEnum.Val1 },
    new Obj { EnumVal = MyEnum.Val3 },
    new Obj { EnumVal = MyEnum.Val2 },
    new Obj { EnumVal = MyEnum.Val3 }
}

// Output
new List<List<Obj>> {
    new List<Obj>{
        new Obj { EnumVal = MyEnum.Val1 },
        new Obj { EnumVal = MyEnum.Val1 },
        new Obj { EnumVal = MyEnum.Val1 }
    },
    new List<Obj>{
        new Obj { EnumVal = MyEnum.Val2 },
        new Obj { EnumVal = MyEnum.Val2 }
    },
    new List<Obj>{
        new Obj { EnumVal = MyEnum.Val3 },
        new Obj { EnumVal = MyEnum.Val3 },
        new Obj { EnumVal = MyEnum.Val3 }
    }
};

I know how to write a function that does this, but is there a way using Linq?

Upvotes: 1

Views: 47

Answers (1)

DavidG
DavidG

Reputation: 118937

You are talking about grouping, not sorting. you can do that with Linqs GroupBy:

var grouped = input.GroupBy(x => x.EnumValue);

Upvotes: 4

Related Questions