我有一个词,我想检索一组别名,我为这个词。例如,我将有一个数组["hello", "hi", "hey", "yo"]。如果我的话是"hey",那么我希望能够得到整个数组。我的第一个想法是使用这样的对象:
let aliasdict = {
"hello": ["hello", "hi", "hey", "yo"],
"hi": ["hello", "hi", "hey", "yo],
"hey": ["hello", "hi", "hey", "yo"],
"yo": ["hello", "hi", "hey", "yo"],
}问题是我计划有100多个不同的短语,每个短语都有2-4个不同的别名。所以会是这样的:
let aliasdict = {
"hello": ["hello", "hi", "hey", "yo"],
"hi": ["hello", "hi", "hey", "yo],
"hey": ["hello", "hi", "hey", "yo"],
"yo": ["hello", "hi", "hey", "yo"],
"blue": ["blue", "green", "white"],
"green": ["blue", "green", "white"],
"white": ["blue", "green", "white"],
"head": ["head", "knees", "tail"],
...
...
}所需的复制粘贴量让我有些厌恶,所以我想问,是否有一个更简单的解决方案,没有复制粘贴那么多,也没有降低使用字典的速度。
谢谢。
发布于 2020-05-27 04:46:42
Alias
const alias = (list = []) => list.reduce((group, alias, index, aliases) => ({
...group,
[alias]: aliases,
}), {});字典
const dictionary = (...lists) => lists.reduce((dictionary, list) => ({
...dictionary,
...alias(list),
}), {});实现
dictionary(
["hello", "hi", "hey", "yo"],
["goodbye", "by", "bye", "piece"]
);输出
{
"hello": [
"hello",
"hi",
"hey",
"yo"
],
"hi": [
"hello",
"hi",
"hey",
"yo"
],
"hey": [
"hello",
"hi",
"hey",
"yo"
],
"yo": [
"hello",
"hi",
"hey",
"yo"
],
"goodbye": [
"goodbye",
"by",
"bye",
"piece"
],
"by": [
"goodbye",
"by",
"bye",
"piece"
],
"bye": [
"goodbye",
"by",
"bye",
"piece"
],
"piece": [
"goodbye",
"by",
"bye",
"piece"
]
}Time关注的是,您必须有一个相当大的列表,或者一个真正关心处理速度的应用程序,这样才能对应用程序产生任何明显的负面影响。
尽管如此,如果您的字典确实变得足够大,从而影响到应用程序的其余部分,那么您可以运行这些函数并复制输出,这样就不会在运行时解析输出。
发布于 2020-05-27 04:33:31
您可以将每个单词视为图形上的一个节点。然后,对于每个链接的字对,在两个节点之间形成一个连接。
因此,您可以使用邻接列表来形成数据结构。
在这张图上,相互关联的单词将有一个边。在这样的映射中查找节点将有O(1)查找时间。
https://www.geeksforgeeks.org/implementation-graph-javascript/
发布于 2020-05-27 04:40:29
如果使用对象不是限制,则可以在开关语句中使用方法。
function getAlias(key) {
switch(key) {
case "hello":
case "hey":
case "yo":
return ["hello", "hi", "hey", "yo"];
case "blue":
case "green":
return ["blue", "green"];
}
}https://stackoverflow.com/questions/62035379
复制相似问题