2017-02-12 87 views
0

我需要帮助来解决此问题。 我已经使用控制台应用程序来解决这个问题,我卡住了。在C#列表中使用相同的组计算行,并将其设置为其他属性的int值

ORDER中的每一行都需要在一个相同的GROUP-value组中具有唯一值。组内ORDER的最大值必须为行数-1,最小值必须为0.排序并不重要。

它只需要是最小值和最大值之间的唯一值。

示例:或041532

ID GROUP VALUE ORDER 
1 1  10  0 
2 1  2  0 
3 2  1  0 
4 3  2  0 
5 3  6  0 
6 3  1  0 
7 3  9  0 

组1有2(-1)行,ORDER值必须0-1。
GROUP 2有1(-1)行,ORDER值必须为0.
GROUP 3有4(-1)行,ORDER值必须为0-3。

结束结果:

ID GROUP VALUE ORDER 
1 1  10  0 
2 1  2  1 
3 2  1  0 
4 3  2  0 
5 3  6  1 
6 3  1  3 
7 3  9  2 

这里是我已经使用的属性。

public class OrderRow 
{ 
    public int ID { get; set; } 
    public int GROUP { get; set; } 
    public int VALUE { get; set; } 
    public int ORDER { get; set; } 
} 

      new OrderRow {ID = 1, GROUP = 1, VALUE = 10, ORDER = 0}, 
      new OrderRow {ID = 2, GROUP = 1, VALUE = 2, ORDER = 0}, 
      new OrderRow {ID = 3, GROUP = 2, VALUE = 1, ORDER = 0}, 
      new OrderRow {ID = 4, GROUP = 3, VALUE = 2, ORDER = 0}, 
      new OrderRow {ID = 5, GROUP = 3, VALUE = 6, ORDER = 0}, 
      new OrderRow {ID = 6, GROUP = 3, VALUE = 1, ORDER = 0}, 
      new OrderRow {ID = 7, GROUP = 3, VALUE = 9, ORDER = 0}, 

THANKS

回答

0

我会去像如下:

 List<OrderRow> orders = new List<OrderRow>() { 
      new OrderRow { ID = 1, GROUP = 1, VALUE = 10, ORDER = 0 }, 
      new OrderRow { ID = 2, GROUP = 1, VALUE = 2, ORDER = 0 }, 
      new OrderRow { ID = 3, GROUP = 2, VALUE = 1, ORDER = 0 }, 
      new OrderRow { ID = 4, GROUP = 3, VALUE = 2, ORDER = 0 }, 
      new OrderRow { ID = 5, GROUP = 3, VALUE = 6, ORDER = 0 }, 
      new OrderRow { ID = 6, GROUP = 3, VALUE = 1, ORDER = 0 }, 
      new OrderRow { ID = 7, GROUP = 3, VALUE = 9, ORDER = 0 }, 
     }; 

     foreach (var item in orders.GroupBy(order => order.GROUP)) 
     { 
      int order = 0; 
      foreach (var item2 in item) 
      { 
       item2.ORDER = order++; 
      } 
     } 
+0

谢谢!! :) @ user3598756 –

+0

不客气。如果我的答案解决了您的问题,您可能想要接受它!谢谢 – user3598756

相关问题