我有一个类
Product
来保存给定产品的具体实例。
这个类有一个相关产品列表,这些产品与主要产品相似。class Product
{
public string Name;
public double Rating;
public List<Product> RelatedProducts;
//...
public List<Product> GetTopRelatedProducts(int N)
{
// How to implement this method
// What I did so far(Bad code)
// 1- INFINITE RECURSION
// 2- Can not remember visited objects
var myList = new List<Product>();
foreach(Product prod in RelatedProducts)
{
myList.AddRange(prod.GetTopRelatedProducts(N));
}
return myList.Distinct().OrderByDescending(x => x.Rating).Take(N).ToList();
}
}
我希望在Product
类中定义一个方法,用于获取排名前 N
的相关产品(即评分最高的产品)。该方法应考虑到 RelatedProducts
列表中的元素是 Product
类型,并且它们也有自己的 RelatedProducts
列表。因此,我需要继续导航嵌套对象,直到访问到所有相关产品为止,然后再取出排名前 N 的产品。
我的意思是,解决方案不应仅仅是 this.RelatedProducts.OrderByDescending(x => x.Rating).Take(N);
还有一件事要记住:两个产品可以相互关联。这意味着某个产品 A 可以属于产品B的 RelatedProducts
列表,而B 也可以属于产品 A的 RelatedProducts
列表。
有什么好的建议可以以最优化的方式解决这个问题吗?假设我有数百万个产品需要维护,如何递归地遍历所有相关产品并识别已访问过的产品?
我将此标记为C#和Java,因为相同的逻辑可以应用于这两种语言。
Product
实例吗? - Ivan Stoev