Foreach循环显示值';s如果重复,则只显示一次

本文关键字:显示 一次 循环 如果 Foreach | 更新日期: 2023-09-27 18:00:42

我有一个foreach循环,其中的值是重复的,我只想将值和输出值分组一次。我的代码看起来像这个

foreach (LoopItem i in GetLoop("Product.Prices")){
    var priceQuantity = "";
    if(i.GetInteger("Ecom:Product.Prices.Quantity") == 0){
        priceQuantity = "1";
    } else if(i.GetInteger("Ecom:Product.Prices.Quantity") >= 1){
        priceQuantity = i.GetString("Ecom:Product.Prices.Quantity");
    }   
    <!--@Translate(Ved, "VED")--> @priceQuantity <!--@Translate(Count, "STK")-->. - <!--@Translate(Count, "STK")-->. <!--@Translate(Price, "PRIS")-->. @i.GetValue("Ecom:Product.Prices.AmountFormatted")<br/> 
    }

它给出了以下输出1stk,1stk,1stk,12stk,8stk,8stk,1 stk

我想将其输出为1stk,12stk,8 stk

如何实现此输出请帮助

Foreach循环显示值';s如果重复,则只显示一次

你可以这样做,先取可枚举集合,然后取

var collection = GetLoop("Product.Prices");
var firstItemsInGroup = from b in collection 
                 group b by b.Quantity into g
                 select g.First();

这将为您提供一个数量项目

var result = GetLoop("Product.Prices").GroupBy(x => x.Quantity).Select(x => x.First());

然后,您可以根据自己的条件打印结果集合。

    foreach (LoopItem i in result){
        var priceQuantity = "";
        if(i.GetInteger("Ecom:Product.Prices.Quantity") == 0){
            priceQuantity = "1";
        } else if(i.GetInteger("Ecom:Product.Prices.Quantity") >= 1){
            priceQuantity = i.GetString("Ecom:Product.Prices.Quantity");
        }   
        <!--@Translate(Ved, "VED")--> @priceQuantity <!--@Translate(Count, "STK")-->. - <!--@Translate(Count, "STK")-->. <!--@Translate(Price, "PRIS")-->. @i.GetValue("Ecom:Product.Prices.AmountFormatted")<br/> 
    }

但你也可以用另一种方式,使用HashSet<T>

var sequence = GetLoop("Product.Prices");
var alreadyIn = new HashSet<T>();
foreach(var i in sequence)
{
        if(alreadyIn.Add(i))// Returns false if item was already in set
        {
           if(i.GetInteger("Ecom:Product.Prices.Quantity") == 0){
               priceQuantity = "1";
           }else if(i.GetInteger("Ecom:Product.Prices.Quantity") >= 1){
             priceQuantity = i.GetString("Ecom:Product.Prices.Quantity");
           }
           <!--@Translate(Ved, "VED")--> @priceQuantity <!--@Translate(Count, "STK")-->. - <!--@Translate(Count, "STK")-->. <!--@Translate(Price, "PRIS")-->. @i.GetValue("Ecom:Product.Prices.AmountFormatted")<br/> 
        }              
}

使用类似于的Distinct()

  foreach (LoopItem i in GetLoop("Product.Prices").Distinct())

应该有效。