c# - Sort and Group in LINQ -


i have list of string tuples, (p1,p2)

i'd know if there's linq statement group p1 (in ascending order), , have group contain p2 values group (in descending order).

for input: ("a","b"), ("a","c"), ("d","b") i'd 2 groups: "a" , "d" (in order, every time) group "a" contains "c" , "b" (in order, every time) , group "d" contains, well, "b".

is possible built-in linq classes or need iterate groups , sort them myself?

nope, it's not hard - need keep track of whether you're looking @ group or elements within group. here's sample query:

var query = tuple in tuples             orderby tuple.p1             group tuple.p2 tuple.p1 g             select new { group = g.key,                          elements = g.orderbydescending(p2 => p2) }; 

here's complete example (avoiding .net 4's tuple type simplicity if you're using .net 3.5):

using system; using system.collections.generic; using system.linq;  public class mytuple {     public string p1 { get; set; }     public string p2 { get; set; } }  class test {     static void main()     {         list<mytuple> tuples = new list<mytuple>         {             new mytuple { p1 = "a", p2 = "b" },             new mytuple { p1 = "a", p2 = "c" },             new mytuple { p1 = "d", p2 = "b" },         };          var query = tuple in tuples             orderby tuple.p1             group tuple.p2 tuple.p1 g             select new { group = g.key,                          elements = g.orderbydescending(p2 => p2) };          foreach (var group in query)         {             console.writeline("{0}:", group.group);             foreach (var value in group.elements)             {                 console.writeline("  {0}", value);             }         }     } } 

note can simpler if you're happy ordering on "need know" basis:

var query = tuple in tuples     orderby tuple.p1     group tuple.p2 tuple.p1;  foreach (var group in query) {     console.writeline("{0}:", group.key);     foreach (var value in group.orderbydescending(x => x))     {         console.writeline("  {0}", value);     } } 

Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -