在 List<> 购物篮中显示项目重复项 c#
Displaying item duplicates in a List<> shopping basket c#
我有一个程序允许用户购买物品并将每个物品放在一个列表中。这是购物篮。我希望程序也显示他们的收据。但是,如果用户购买了很多商品,那么仅列出他们的购物篮会使收据过长。所以我试图在列表中显示重复的项目:
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 个重复的 'cake',输出将如下所示:
5x ............蛋糕
5x ............蛋糕
5x ............蛋糕
5x ............蛋糕
5x ............蛋糕
如何让我的函数只显示一个“5x ............蛋糕”?我错过了什么?
使用GroupBy
.
foreach (var group in basket.GroupBy( x => x ) )
Console.WriteLine( $"{group.Count()}x {group.Key}" );
此处最简单的解决方案是使用 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}");
}
}
您需要找到不同的项目并计算每个项目的重复项。您可以使用 "group by" 运算符来查找它们。例如:
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);
}
}
您可以使用Distinct()
static void generateReceipt(List<string> basket)
{
foreach(var item in basket.Distinct())
{
Console.WriteLine(basket.Count(x => x == item) + "x ................ " + item);
}
}
我有一个程序允许用户购买物品并将每个物品放在一个列表中。这是购物篮。我希望程序也显示他们的收据。但是,如果用户购买了很多商品,那么仅列出他们的购物篮会使收据过长。所以我试图在列表中显示重复的项目:
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 个重复的 'cake',输出将如下所示:
5x ............蛋糕
5x ............蛋糕
5x ............蛋糕
5x ............蛋糕
5x ............蛋糕
如何让我的函数只显示一个“5x ............蛋糕”?我错过了什么?
使用GroupBy
.
foreach (var group in basket.GroupBy( x => x ) )
Console.WriteLine( $"{group.Count()}x {group.Key}" );
此处最简单的解决方案是使用 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}");
}
}
您需要找到不同的项目并计算每个项目的重复项。您可以使用 "group by" 运算符来查找它们。例如:
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);
}
}
您可以使用Distinct()
static void generateReceipt(List<string> basket)
{
foreach(var item in basket.Distinct())
{
Console.WriteLine(basket.Count(x => x == item) + "x ................ " + item);
}
}