首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用固定时间的新数据更新现有列表?

用固定时间的新数据更新现有列表?
EN

Stack Overflow用户
提问于 2018-06-17 03:18:31
回答 1查看 160关注 0票数 0

所以问题是O(1)或恒定时间,我需要比较一个T类的数组,它将在稍后与其他一些数据集进行更新。这个例子中的项目长度很小,但是假设一个更大的数据集,比如2000,你就会得到这个问题。如何使用Typescript以最省时的方式使用新列表更新现有列表?

代码语言:javascript
复制
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);
    }
});

EN

回答 1

Stack Overflow用户

发布于 2018-06-17 07:58:23

更新n项的时间复杂度至少为 O(n)。在您的实现中,它大约是O(n *m+k* m),其中字母是3个电影数组的长度。为了使这个值更接近O(n),您可以创建一个查找对象来进行接近常量的查找。例如(未测试):

代码语言:javascript
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50890987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档