检查列表

时间:2015-09-23 14:33:28

标签: for-loop

我有一个名为BasketItem的对象列表。 BasketItem具有不同的属性,标题,ID和格式。我将BasketItems添加到列表中,但是当添加两个具有相同title / id但不同格式的BasketItem时,我想将其Price属性更改为0.

例如,我有book1并可以将其添加到MOBI或EPUB中。如果我将MOBI中的book1添加到我的列表中,价格为3.99,因此总价格为3.99。如果我然后添加EPUB我希望总数保持3.99但是如果我以0的价格添加它,如果我从列表中删除book1-MOBI,则总值将为0,因为剩余的书具有该属性。

我需要总价计算器来检查或其他。

我尝试使用两个for循环检查ID是否相同但格式不同但是我无法确定如何使其工作。

购物篮商品属性:

    public int ID { get; set; }
    public string ReferenceNumber { get; set; }
    public decimal UnitPrice { get; set; }
    public string Title { get; set; }
    public string FormatType { get; set; }
    public int BaskID { get; set; }
    public bool AddedToBask { get; set; }

对于一个更简单的例子:当我添加到一个篮子时,我简单地将一个BasketItem添加到一个BasketItems列表中

我有一个篮子属性,用于计算总价格:

                foreach (BasketItem item in BasketItems)
            {
                foreach (BasketItem bskItem in BasketItems)
                {
                    if(item == bskItem)
                    {
                        totalPrice += item.UnitPrice;
                    }
                }
            }
            return totalPrice;

当一个名称/ ID相同的项目在购物篮中时,您只需为多种格式支付一个价格。 这意味着您将book1-MOBI添加到篮子中,价格为3.99,因此篮子总数达到3.99。 如果您将book1-EPUB添加到购物篮中,那么购物篮的总数将保持3.99,因为它只是不同的格式。 如果你之后添加了book2-MOBI,那么它会从2本不同的书中获得7.98。

来自VB的代码C#中的评论

        public decimal BasketTotal {
        get {
            decimal totalPrice = 0;
            for (int i = 0; i < BasketItems.Count; i++)
            {
                bool existsPre = false;
                for (int j = i; j >= 0; j--)
                {
                    if(BasketItems[i].Title == BasketItems[j].Title && BasketItems[i].FormatType != BasketItems[j].FormatType)
                    {
                        existsPre = true;
                        break;
                    }
                }
                if (!existsPre)
                {
                    totalPrice += BasketItems[i].UnitPrice;
                }
            }
            return totalPrice;
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以使用此伪代码(抱歉,我认为在VB.NET语言中):

For i as Integer = 0 To BasketItems.Count - 1

    Dim blnExistsAnotherFormat as Boolean = False

    For j as Integer = i To 0 Step -1
        If BasketItems(i).Title = BasketItems(j).Title And _
            BasketItems(i).FormatType <> BasketItems(j).FormatType Then
            blnExistsAnotherFormat = True
            Exit For
        End If
    Next j

    If Not blnExistsAnotherFormat Then
        TotalPrice += BasketItems(i).UnitPrice
    End If

Next i