For loop 检查列表中是否已存在同名但值不同的项
我有一个叫做BasketItem的物品清单。BasketItem具有不同的属性、标题、id和格式。我将BasketItems添加到列表中,但是当添加两个标题/id相同但格式不同的BasketItems时,我希望将其Price属性更改为0 例如,我有book1,可以将其添加到MOBI或EPUB中。如果我将MOBI中的book1添加到我的列表中,则价格为3.99,因此总价为3.99。如果我添加EPUB,我希望总数保持在3.99,但是如果我以0的价格添加它,如果我从列表中删除book1 MOBI,那么总值将为0,因为剩余的book具有该属性 我需要总价计算器检查一下,或者做点别的 我尝试用两个for循环检查ID是否相同,但格式不同,但我无法确定如何使其工作 篮子项目属性:For loop 检查列表中是否已存在同名但值不同的项,for-loop,For Loop,我有一个叫做BasketItem的物品清单。BasketItem具有不同的属性、标题、id和格式。我将BasketItems添加到列表中,但是当添加两个标题/id相同但格式不同的BasketItems时,我希望将其Price属性更改为0 例如,我有book1,可以将其添加到MOBI或EPUB中。如果我将MOBI中的book1添加到我的列表中,则价格为3.99,因此总价为3.99。如果我添加EPUB,我希望总数保持在3.99,但是如果我以0的价格添加它,如果我从列表中删除book1 MOBI,那么
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; }
对于一个更简单的exmaple:当我添加到一个篮子中时,我简单地将一个篮子项目添加到一个篮子项目列表中
我有一个计算总价的篮子财产:
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,它将变为7.98,因为有两本不同的书
来自C#中VB注释的代码
public decimal BasketTotal{
得到{
十进制总价=0;
对于(int i=0;i=0;j--)
{
if(BasketItems[i].Title==BasketItems[j].Title&&BasketItems[i].FormatType!=BasketItems[j].FormatType)
{
existsPre=true;
打破
}
}
如果(!existsPre)
{
总价+=篮子物品[i]。单价;
}
}
返回总价;
}
}
您可以使用此伪代码(对不起,我认为是用VB.NET语言编写的):
对于BasketItems,i为整数=0。计数-1
Dim BlnexistAnotherFormat为布尔值=False
对于j,作为整数=i到0步骤-1
如果篮子项目(i).标题=篮子项目(j).标题和_
BasketItems(i).FormatType BasketItems(j).FormatType Then
blnexitsanotherformat=True
退出
如果结束
下一个j
如果不是BLNEXITSANOTHER格式,则
总价+=篮子物品(i).单价
如果结束
接下来我
你能简化你的示例,并展示一些代码示例吗?添加了两个循环和另一个示例。我在我的帖子中添加了我的c#代码,但是当我在篮子中找到一个项目,甚至两个不同的项目时,它就起作用了。但是两个相同类型的不同格式不起作用。我可能要用我从VB转换到C的方式来做,第二个循环必须是从你正在分析的项目开始的反向循环。您还必须在第一个foreach的每个循环上重置existsPre=false。我反转了列表,然后在第二个for循环中进行了筛选,但它仍然有相同的错误。它使两者的值都为0,而不是1。Posted I反转列表I filter Through反转循环必须从您正在分析的位置开始;如果您有一个包含10个项目的列表,并且正在分析第3个项目,则只需检查前两个项目是否包含不同格式的相同标题。对不起,我的英语不好。
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;
}
}
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