所以问题是O(1)或恒定时间,我需要比较一个T类的数组,它将在稍后与其他一些数据集进行更新。这个例子中的项目长度很小,但是假设一个更大的数据集,比如2000,你就会得到这个问题。如何使用Typescript以最省时的方式使用新列表更新现有列表?
let movies: Array<Movie> = getMovies();
let updatedMovies: Array<Movie> = getUpdatedMovies();
// Delete ones that no longer exist within the new data set
let remainingMovies: Array<Movie> = movies.filter((value) => {
return updatedMovies.some((value2) => {return value2.identifier == value.identifier});
});
// Update existing items or push a new one (ES6 Only)
updatedMovies.forEach(updatedMovie => {
let item = remainingMovies.find(value => { return value.identifier == updatedMovie.identifier});
if (item) {
item = updatedMovie;
}
else {
remainingMovies.push(updatedMovie);
}
});
发布于 2018-06-17 07:58:23
更新n项的时间复杂度至少为 O(n)。在您的实现中,它大约是O(n *m+k* m),其中字母是3个电影数组的长度。为了使这个值更接近O(n),您可以创建一个查找对象来进行接近常量的查找。例如(未测试):
let movies: Array<Movie> = getMovies(), updatedMovies: Array<Movie> = getUpdatedMovies();
let updatedMoviesLookup = updatedMovies.reduce((obj, val) => (obj[val.identifier] = val, obj), {});
let remainingMovies: Array<Movie> = movies.filter(val => val.identifier in updatedMoviesLookup);
https://stackoverflow.com/questions/50890987
复制相似问题