在列表<>中显示项目重复项购物篮c#

时间:2017-03-25 15:11:49

标签: c# list for-loop console.writeline

我有一个允许用户购买商品的程序,它将每个商品放在一个列表中。这是购物篮。我希望程序也显示他们的收据。但是,如果用户购买了大量物品,那么仅仅列出他们的购物篮就会使收据过长。所以我试着在列表中显示重复的项目:

static void generateReceipt(List<string> basket)
    {
        for (int i = 0; i < basket.Count(); i++)
        {
            Console.WriteLine(basket.Count(x => x == basket[i]) + "x ................ " + basket[i]);
        }

    }

然而,当我使用它时,让我们说5个重复的蛋糕&#39;在篮子中,输出将如下所示:

5x .............蛋糕

5x .............蛋糕

5x .............蛋糕

5x .............蛋糕

5x .............蛋糕

我如何让我的功能只显示一个&#34; 5x ..........蛋糕&#34;?我错过了什么?

4 个答案:

答案 0 :(得分:1)

使用GroupBy

foreach (var group in basket.GroupBy( x => x ) )
    Console.WriteLine( $"{group.Count()}x {group.Key}" );

答案 1 :(得分:1)

此处最简单的解决方案是使用GroupBy

void Main()
{
    var basket = new List<string>
    {
        "Cake",
        "Cake",
        "Apples",
        "Bananas",
        "Cake",
        "Cookies",
        "Cake"
    };

    GenerateReceipt(basket);

    // Output:
    // 4x ................ Cake
    // 1x ................ Apples
    // 1x ................ Bananas
    // 1x ................ Cookies
}

static void GenerateReceipt(List<string> basket) {
    var groupedBasket = basket.GroupBy(b => b);

    foreach (var item in groupedBasket) {
        Console.WriteLine($"{item.Count()}x ................ {item.Key}");
    }
}

答案 2 :(得分:1)

您需要为每个项目找到不同的项目和计数。您可以使用&#34; group by&#34;寻找他们的运营商。例如:

 static void generateReceipt(List<string> basket)
        {
            var itemsGroupped = from item in basket
                                  group item by item into g
            select new { Name = g.Key, Count = g.Count() };

            foreach (var item in itemsGroupped)
            {
                Console.WriteLine(item.Count + "x ................ " + item.Name);
            }

        }

答案 3 :(得分:1)

您可以使用Distinct()

 static void generateReceipt(List<string> basket)
 {
        foreach(var item in basket.Distinct())
        {
          Console.WriteLine(basket.Count(x => x == item) + "x ................ " + item);
        }
 }