检查下面的代码。我有一些数据的oldPrice和newPrice变量。然后,我将它们加到一个名为- allItems的列表中。现在,您将注意到变量oldPrice和newPrice具有ASIN属性,这是每个数据集的标识。现在我的目标是-在allItems变量中,我希望匹配ASIN值数据的price应该被更新。ASIN = “one”, ASIN = “two”在newPrice和oldPrice中都很常见,所以从newPrice到oldPrice都应该在one and two中更新。我怎么能这么做?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ASIN_REFRESH_2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Test App");
//old price has 4 values
var oldPrice = new List<ThirdPartyData>();
oldPrice.Add(new ThirdPartyData { ASIN = "one", price = 5, IsPrime = true });
oldPrice.Add(new ThirdPartyData { ASIN = "two", price = 6, IsPrime = true });
oldPrice.Add(new ThirdPartyData { ASIN = "three", price = 7, IsPrime = false });
oldPrice.Add(new ThirdPartyData { ASIN = "four", price = 8, IsPrime = false });
//new price has 2 values
var newPrices = new List<ThirdPartyData>();
newPrices.Add(new ThirdPartyData { ASIN = "one", price = 1, IsPrime = false });
newPrices.Add(new ThirdPartyData { ASIN = "two", price = 2, IsPrime = true });
var allItems = new List<ThirdPartyData>();//here old price and new price added in single list
allItems.AddRange(newPrices);
allItems.AddRange(oldPrice);
Console.ReadKey();
}
}
class ThirdPartyData
{
public string ASIN { get; set; }
public int price { get; set; }
public bool IsPrime { get; set; }
}
}发布于 2018-08-25 04:32:24
您的请求还不清楚(至少对我来说是这样),但下面是您如何开始根据另一个列表更新列表的方法:
oldPriceMap = oldPrice.ToDictionary(p => p.ASIN, p => p);
foreach (var item in allItems) {
if (oldPriceMap.Cotains(item.ASIN)) {
// change something on current item
item.price = oldPrice.price;
}
}为什么是地图?您的示例有非常小的列表,但是如果旧列表相当大(数千项)怎么办?您必须查找匹配项,这将在常规列表中获取O(n)。该映射有助于将其简化为O(1)。
https://stackoverflow.com/questions/52014010
复制相似问题