首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索字符串数组

检索字符串数组
EN

Stack Overflow用户
提问于 2020-05-27 04:19:26
回答 4查看 67关注 0票数 1

我有一个词,我想检索一组别名,我为这个词。例如,我将有一个数组["hello", "hi", "hey", "yo"]。如果我的话是"hey",那么我希望能够得到整个数组。我的第一个想法是使用这样的对象:

代码语言:javascript
复制
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个不同的别名。所以会是这样的:

代码语言:javascript
复制
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"],
   ...
   ...
}

所需的复制粘贴量让我有些厌恶,所以我想问,是否有一个更简单的解决方案,没有复制粘贴那么多,也没有降低使用字典的速度。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-27 04:46:42

Alias

代码语言:javascript
复制
const alias = (list = []) => list.reduce((group, alias, index, aliases) => ({
   ...group,
   [alias]: aliases,
}), {});

字典

代码语言:javascript
复制
const dictionary = (...lists) => lists.reduce((dictionary, list) => ({
   ...dictionary,
   ...alias(list),
}), {});

实现

代码语言:javascript
复制
dictionary(
  ["hello", "hi", "hey", "yo"],
  ["goodbye", "by", "bye", "piece"]
);

输出

代码语言:javascript
复制
{
  "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关注的是,您必须有一个相当大的列表,或者一个真正关心处理速度的应用程序,这样才能对应用程序产生任何明显的负面影响。

尽管如此,如果您的字典确实变得足够大,从而影响到应用程序的其余部分,那么您可以运行这些函数并复制输出,这样就不会在运行时解析输出。

票数 2
EN

Stack Overflow用户

发布于 2020-05-27 04:33:31

您可以将每个单词视为图形上的一个节点。然后,对于每个链接的字对,在两个节点之间形成一个连接。

因此,您可以使用邻接列表来形成数据结构。

在这张图上,相互关联的单词将有一个边。在这样的映射中查找节点将有O(1)查找时间。

https://www.geeksforgeeks.org/implementation-graph-javascript/

票数 0
EN

Stack Overflow用户

发布于 2020-05-27 04:40:29

如果使用对象不是限制,则可以在开关语句中使用方法。

代码语言:javascript
复制
function getAlias(key) {
    switch(key) {
       case "hello":
       case "hey":
       case "yo":
          return ["hello", "hi", "hey", "yo"];

       case "blue":
       case "green":
           return ["blue", "green"];
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62035379

复制
相关文章

相似问题

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