我正尝试从列表中获取有序记录,如下所示:
static Dictionary<string, List<Recomdendations>> productRecomdendationss = new Dictionary<string, List<Recomdendations>>();
public List<Recomdendations> TopMatches(int id)
{
var name = db.Books.SingleOrDefault(x=>x.Id==id).BkName;
List<Recomdendations> books = LoadBooks().ToList();
productRecomdendationss.Add(name,books);
// grab of list of products that *excludes* the item we're searching for
var sortedList = productRecomdendationss.Where(x => x.Key != name);
sortedList.OrderByDescending(x => x.Key);
List<Recomdendations> Recomdendationss = new List<Recomdendations>();
// go through the list and calculate the Pearson score for each product
foreach (var entry in sortedList)
{
Recomdendationss.Add(new Recomdendations() { bookName =entry.Key , Rate = CalculatePearsonCorrelation(name, entry.Key) });
}
return Recomdendationss.OrderByDescending(x=> x.Rate).ToList();
}
当我尝试在以下行中将记录添加到列表中时出现问题:
foreach (var entry in sortedList)
{
Recomdendationss.Add(new Recomdendations() { bookName =entry.Key , Rate = CalculatePearsonCorrelation(name, entry.Key) });
}
它仅将最后一条记录添加到列表中,而我要求将所有记录作为有序记录添加到列表中。因此,我应该如何修改代码以返回列表中的所有建议。我调试了代码,发现这行代码有问题。
答案 0 :(得分:0)
首先,productRecomdendationss
是一个包含元组值(string, List<Recomdendations>)
的字典。通过productRecomdendationss.Add(name,books);
,您可以在字典中添加一个元组值。
var sortedList = productRecomdendationss.Where(x => x.Key != name); sortedList.OrderByDescending(x => x.Key);
使用上面的代码,您尝试获取某事的列表,而productRecomdendationss
不是列表,它是单项变量字典。让我们假设where子句还可以,它返回了books
列表。
此后,您再次错过了sortedList
是一个字典的问题,我想您仍然假设它是一个列表,并将其foreach到该变量上。并且,这也是为什么您将单个项目添加到返回列表中的原因。
// sortedList already holds a dictionary and its count 1
foreach (var entry in sortedList)
{
Recomdendationss.Add(new Recomdendations() { bookName =entry.Key , Rate = CalculatePearsonCorrelation(name, entry.Key) });
}
要实现您所描述的内容,您应该使用bool productRecomdendationss.TryGetValue("key", out sortedList))
访问列表,然后可以遍历其元素。希望这种方法可以解决您的问题。
编辑:
要正确使用TryGetValue(),可以使用if / else,如下所示。
// Correct key will return true and
//you can loop over the returned List<Recomdendations>
if (productRecomdendationss.TryGetValue("key", out listOfRec))
{
//if true, listofRec will hold data from the dictionary.
foreach (var entry in listOfRec)
{
//do your thing
}
}else
{
//Data with inquired key is not found
}
此外,您可以像这样从字典中获取值。
// Check whether Dictionary contains data with this key.
if (dictionary.ContainsKey("key"))
{
var value = dictionary["key"];
}