C# 添加到列表<;字符串>;但是在添加项目时遇到问题
我有两个清单,每个清单上有200个项目。 列表A包含产品的名称。 清单B包含产品的价格 我还有一份清单(清单C),里面有250个项目,包括产品的名称和价格 现在,我试着比较列表A的名称,看看它们是否存在于列表C中,如果存在,我想使用列表C中的价格 这就是我迄今为止所尝试的:C# 添加到列表<;字符串>;但是在添加项目时遇到问题,c#,list,for-loop,foreach,C#,List,For Loop,Foreach,我有两个清单,每个清单上有200个项目。 列表A包含产品的名称。 清单B包含产品的价格 我还有一份清单(清单C),里面有250个项目,包括产品的名称和价格 现在,我试着比较列表A的名称,看看它们是否存在于列表C中,如果存在,我想使用列表C中的价格 这就是我迄今为止所尝试的: foreach (var item in wiznzList) { for (int j = 0; j < nameList.Count; j++) { if (nameList[j]
foreach (var item in wiznzList)
{
for (int j = 0; j < nameList.Count; j++)
{
if (nameList[j] == item.ProductName)
{
wizNzPriceList.Add(item.Price);
}
else
{
wizNzPriceList.Add("No Product");
}
}
}
foreach(wiznzList中的变量项)
{
对于(int j=0;j
我想浏览一下名字列表,检查它们是否存在于列表C中,如果存在,我想从列表C中添加价格,如果不存在,我希望它不写任何产品
所以,最后我想要3个列表,每个列表中有200个项目
相反,当我运行此命令时,会将10040000项添加到列表中。有人能给我指出正确的方向吗。如果我对你的问题理解正确的话(陪审团对此表示怀疑) 您可以使用
ToDictionary
和Select
var dict = products.ToDictionary(x => x.ProductName, x => x.Price);
var results = names.Select(x => dict.TryGetValue(x, out var value) ? value.ToString() : "No Product");
注意:对于O(n^2)时间复杂度,可以使用
任意
。但是,ToDictionary
将更有效您可以尝试使用LINQ并用方法替换内部循环
foreach(wiznzList中的变量项)
{
if(nameList.Any(p=>p==item.ProductName)
{
wizNzPriceList.Add(项目价格);
}
其他的
{
wizNzPriceList.添加(“无产品”);
}
}
我找到了一个代码,它可以实现您希望它做的事情
对象产品(字符串pName、浮点pPrice)
列出产品列表,以便您可以存储和更改价格
listB浮动列表,未使用
列表C带有pName和pPrice的产品列表
CompareA_With_C()方法首先检查相同的产品,如果为true,则将列表C的价格放入listA,并中断内部循环
else if语句等待循环遍历整个listC,如果没有找到匹配的pName,则在listA中将pName更改为“no Product”
代码:
void CompareA_With_C()
{
for (int i = 0; i < listA.Count; i++)
{
for (int j = 0; j < listC.Count; j++)
{
string a = listA[i].pName;
string c = listC[j].pName;
if (string.Equals(a, c))
{
listA[i].pPrice = listC[j].pPrice;
break;
}
else if (j == (listC.Count - 1))
{
listA[i].pName = "No Product";
listB[i] = 0.0f;
}
}
}
}
void CompareA_与_C()
{
for(int i=0;i
我使用下面的代码解决了我的问题,非常感谢Crispi
for (int i = 0; i < nameList.Count; i++)
{
for (int j = 0; j < wiznzList.Count; j++)
{
string a = nameList[i];
string c = wiznzList[j].ProductName;
if (string.Equals(a, c))
{
wizNzPriceList.Add(wiznzList[j].Price);
break;
}
else if (j == (wiznzList.Count - 1))
{
wizNzPriceList.Add("No Product");
}
}
}
for(int i=0;i
我现在获得了所需的200个结果。感谢大家抽出时间。您是否尝试在.Add()之后放置一个
中断;
。您也可以使用if(nameList.Contains(item.ProductName))
而不是内部for循环。您好,感谢您的快速回复。我尝试了Contains()但由于产品名称相似,我改为使用==来代替。添加break;会给我50200个项目,而不是10040000个。嘿,欢迎使用stack overflow。请阅读。您可以编辑您的帖子,以包含列表的数据,以帮助重现问题。据我所知,ListB在功能上没有被使用,我们为什么在意关于它?列表A是一个包含1个网站的200种产品的列表,列表B包含这些产品的价格。列表C包含250种不同网站的产品和价格。谢谢您的回复,不幸的是,这给了我相同的结果。@SJKim这个问题中的代码不可能导致“10040000项添加到列表中”…您好,您是对的,我把它放在了一个For循环中,我想这使它得到了10040000项。我现在得到了253项的结果,这是列表C中的项目数量。我仍在试图弄清楚我怎么只能得到200项结果。PS:noob就是我:)另外,我对.add()也不满意听起来像是增加了项目的#,是不是有点像.replace()?但是,我还没有研究列表:(你好,我尝试过这个,它给了我50400个结果。如果我使用for循环并将foreach循环放入其中,它会给我太多的结果。谢谢你的回复:),我是一个大傻瓜,我也完全改变了我的答案,现在它工作了!可能写得更紧凑,但灰色单元格现在已经很累了:)PS:你可以用字符串替换listA中的产品,并稍微调整代码。删除了不必要的代码,这是我作为初学者所能做的最好的:)嗨,谢谢你花时间研究这个,我会尝试t他的现在:)