java选择相关对象的前N个元素
我有一个类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
列表。所以我应该继续导航嵌套对象,直到所有相关的产品都被访问,然后再使用top N产品。
我的意思是,解决方案不是简单的this.RelatedProducts.OrderByDescending(x => x.Rating).Take(N);
还有一件事需要记住:两种产品可以相互关联。这意味着产品a可以属于产品B的RelatedProducts
列表,B也可以属于产品a的RelatedProducts
列表
如何以最佳方式解决这个问题,有什么建议吗
想象一下,我要维护数以百万计的产品。如何递归浏览所有相关产品并识别已访问的产品
我将其标记为C#和Java,因为相同的逻辑可以应用于这两种语言
共 (0) 个答案