使用 Node.js 记忆遍历的 fs 路径
Memoizing traversed fs paths with Node.js
我有一个工具可以通过文件系统并发搜索某些文件。当工具搜索 fs 时,它可能会发现它需要搜索最初未包含在搜索中的目录。
我应该做的是记住每个已经开始搜索的目录。
我想不出更好的方法来记忆文件路径,除了将它们存储在像这样的散列中:
interface IMemoizationMap {
[key: string]: boolean
}
所以看起来像:
const hash = {
'/Users/you/projects/x': true,
'/Users/you/projects/x/lib': true,
'/Users/you/projects/x/lib': true,
...
...
'/Users/you/some-stuff/z': true
};
然后我快速查找是否需要搜索某个目录。这个解决方案让人感到尴尬的是,散列中的值几乎可以是任何东西——真、假、未定义。
这是记住遍历文件路径的最佳方式吗?
顺便说一句,是
的表现
key in hash
与
相同
hash[key]
?
如果是这样的话,那么存储的数据就会有一些价值:
当开始搜索目录时,我可以将值设置为 false,然后当目录完成搜索时,我可以将值翻转为 true。那么这个值至少意味着 something.
选择 Map
:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map
The Map object holds key-value pairs. Any value (both objects and
primitive values) may be used as either a key or a value.
或Set
:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set
The Set object lets you store unique values of any type, whether
primitive values or object references.
我会选择 Set
,但我不知道在测试该值是否已存在于集合中时两者之间的性能比较。
我有一个工具可以通过文件系统并发搜索某些文件。当工具搜索 fs 时,它可能会发现它需要搜索最初未包含在搜索中的目录。
我应该做的是记住每个已经开始搜索的目录。
我想不出更好的方法来记忆文件路径,除了将它们存储在像这样的散列中:
interface IMemoizationMap {
[key: string]: boolean
}
所以看起来像:
const hash = {
'/Users/you/projects/x': true,
'/Users/you/projects/x/lib': true,
'/Users/you/projects/x/lib': true,
...
...
'/Users/you/some-stuff/z': true
};
然后我快速查找是否需要搜索某个目录。这个解决方案让人感到尴尬的是,散列中的值几乎可以是任何东西——真、假、未定义。
这是记住遍历文件路径的最佳方式吗?
顺便说一句,是
的表现key in hash
与
相同hash[key]
?
如果是这样的话,那么存储的数据就会有一些价值:
当开始搜索目录时,我可以将值设置为 false,然后当目录完成搜索时,我可以将值翻转为 true。那么这个值至少意味着 something.
选择 Map
:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map
The Map object holds key-value pairs. Any value (both objects and primitive values) may be used as either a key or a value.
或Set
:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set
The Set object lets you store unique values of any type, whether primitive values or object references.
我会选择 Set
,但我不知道在测试该值是否已存在于集合中时两者之间的性能比较。