我有一个学生模型,其中有电话号码和地址列表。当我更新学生时,需要更新相关数据(电话和地址)。为此,我在学生控制器中编写了一个PUT操作。它工作正常,但我担心查询的效率。请检查代码并建议我即兴创作。谢谢
String.prototype.toObject = function(l1, l2) {
var obj = {};
this.split(l1).map(o => {
var el = o.split(l2);
obj[el[0]] = el[1];
})
return obj;
}
var hashString = "model,5;month,10;year,2018";
var hashString2 = "model=5-month=10-year=2018";
console.log(hashString.toObject(";", ","))
console.log(hashString2.toObject("-", "="))
答案 0 :(得分:0)
通常不必担心搜索较小的内存集合。因此,如果一个学生有数十个或数百个地址,则重复查找将不会很重要,尤其是与写入数据库所需的时间相比。
如果确实要优化,则可以将学生的地址复制到词典中。像这样:
var existingAddresses = p.Addresses.ToList();
var studentAddresses = student.Addresses.ToDictionary(i => i.Id);
foreach (var existingAddress in existingAddresses)
{
if (studentAddresses.TryGetValue(existingAddress.Id, out Address address))
{
_Context.Entry(existingAddress).CurrentValues.SetValues(address);
}
else
{
_Context.Remove(existingAddress);
}
}
对这样的内存集合的查询:
var address = student.Addresses.SingleOrDefault(i => i.Id == existingAddress.Id);
只会简单地遍历所有学生。地址会比较ID。 Dictionary <>就像索引一样,提供了非常快速的查找。