根据销售额/年龄将用户插入级别

时间:2012-10-24 14:59:59

标签: c# list sorting

我有一份销售人员名单,其中包括字段,名称,地区和销售。我已根据销售的商品数量对它们进行了分类,但我需要一种方法将它们分成几个级别并将其打印出来。例如:

  

詹姆斯 - 12销售

     比利 - 25销售

     

2名推销员达到1级:销售额低于50

等等。最简单,最好的方法是什么?

我目前用于排序的循环如下所示:

    foreach (salesman n in salesmen.OrderBy(s=>s.sales))
    {
        Console.WriteLine(n.name);
        Console.WriteLine(n.sales);
    }

2 个答案:

答案 0 :(得分:0)

  

我有一份销售人员名单,其中包括字段,名称,地区和销售。我已根据销售的商品数量对它们进行了分类,但我需要一种方法将它们分成几个级别并将其打印出来。例如:

     
    

詹姆斯 - 12销售

         比利 - 25销售

         

2名推销员达到1级:销售额低于50

  
     

等等。最简单,最好的方法是什么?

     

我目前用于排序的循环如下所示:

foreach (salesman n in salesmen.OrderBy(s=>s.sales))
{
    Console.WriteLine(n.name);
    Console.WriteLine(n.sales);
}

编码没有秘密,也没有捷径。我们首先开发业务逻辑“如果销售人员进行了如此多的销售,他们处于这个级别,那么多的销售,那个级别”,然后我们将其转变为计算机逻辑。这是编程的艺术,找到将人们的陈述变成数学陈述的最佳方法。有时数学陈述非常冗长,有时它们很简洁。不会改变当天的结束,你所能做的就是编写代码。

将列表中的所有人排序到存储桶中的唯一方法是遍历列表的每个部分。这是一个迭代或循环。你这样做。然后我们测试(.OrderBy(s...)某些关键字或值。

执行您所要求的最简单,最好的方法是定义业务规则,然后使用循环将它们封装在逻辑中。您可能会发现每个业务规则最终都有一个列表,这不是一件坏事。

这里唯一的问题是听起来你正在寻找“这始终是存储此数据的最佳方式”的答案,而这里并不存在。在我们了解您的整个用例之前,我们能做的最好的事情就是说“是的,这是合适的”。每种情况都需要不同的答案。我意识到这不是一个答案,但有时这是你需要听到的答案。你做得很好,对自己有一点信心。

答案 1 :(得分:0)

由于您没有指定代码或如何填充对象,因此方法是:

Employees.ForEach(e => Console.WriteLine("{0} - {1} Sale/s",e.Name, e.Sales.Count().ToString()));

    int[] levels = new int[1];
    levels[0] = 50;

    for (int i = 0; i < levels.Length; i++)
        {
        var emps = Employees.Where(e => e.Sales.Count() <= levels[i]);

        emps.ForEach(Console.WriteLine("{0} salesmen have reachead level {1}: under {2} sales", emps.Count(), i.ToString(), levels[i]);
        // Remove employees from the list that already achived the level (so they won't be counted again).
        Employess.RemoveAll(e=> e.Sales.Count() <= levels[i]);
        }

这只是伪代码,它可能无法编译,但它是一般的想法。