-2

我有一个包含字段、名称、地区和销售的销售人员列表。我已经按售出的文章数量对它们进行了排序,但我需要一种方法将它们分成多个级别并打印出来。例如:

詹姆斯 - 12 次销售

比利 - 25 销售

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

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

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

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

2 回答 2

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...针对某些关键字或值测试 ( )。

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

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

于 2012-10-24T15:14:11.903 回答
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]);
        }

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

于 2012-10-24T15:17:47.280 回答