gpt4 book ai didi

java - 在任意事物的列表(数组)中创建关联的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 04:48:52 27 4
gpt4 key购买 nike

我正在制作一个单词定义测验应用程序,我的单词列表及其定义采用 JSON 格式,结构如下:

"words": [
{
"word": "rescind",
"type": "verb",
"definition": "to take back, repeal as in a rule or policy"
},
{
"word": "curtail",
"type": "verb",
"definition": "to reduce or lessen"
},

等等等等。

在测验中,您将获得一个随机选择的单词和五个定义供您选择。就像标准化的多项选择测试一样。

现在,我开始看到的一个问题是我的单词含义非常相似。我目前从列表中随机选择了 4 个错误的定义,但为了避免混淆,我想避免选择与正确选择相似的定义。

我应该如何创建这个“相似性” map ?我想到的一种解决方案是:
        {
"word": "avid",
"type": "adjective",
"definition": "extremely excited about, enthusiastic about",
"similar to": [
"ardent",
"fervent"
]
},

但是我意识到这个解决方案有点糟糕,因为我必须互相访问并实现相同的列表,当我最终添加大量单词时,编辑起来会变得非常笨重。

那么你们认为最好的解决方案是什么?

最佳答案

一个简单的第一种方法是创建一个 Word带字段的类。

确保覆盖 equals() hashCode() 使用“单词”字段(我称之为“值”以将其与类名区分开来)(见下文):

public class Word {
private final String value;
private final String type;
private final String definition;
private final List<Word> synonymns = new ArrayList<Word>();

public Word(String value, String type, String definition) {
this.value = value;
this.type = type;
this.definition = definition;
}

// equals() and hashCode() based on the value field
@Override
public int hashCode() {
return value.hashCode();
}
@Override
public boolean equals(Object obj) {
return obj instanceof Word && ((Word)obj).value.equals(value);
}

public String getValue() {
return value;
}
public String getType() {
return type;
}
public String getDefinition() {
return definition;
}
public List<Word> getSynonymns() {
return synonymns;
}
}

实现 equals()hashCode()基于值字段意味着您可以使用 Set 防止重复:
Set<Word> words = new HashSet<Word>(); // wont allow two Word objects with the same value

您可以使用来自 Set.add() 的返回值, 如果该集合尚未包含指定元素,则为 true,以检查添加的单词是否实际上是唯一的:
Word word = new Word("duplicate", "adjective", "another copy");
if (!words.add(word)) {
// oops! set already contained that word
}

如果您想添加特殊酱汁,请制作 type枚举:
public enum PartOfSpeach {
NOUN,
VERB, // in USA "verb" includes all nouns, because any noun can be "verbed"
ADJECTIVE,
ADVERB
}

您可以考虑允许单词属于多种类型:
  • bark:动词:狗做什么
  • 树皮:名词:覆盖一棵树的东西

  • 事实上,你可以考虑每个词有多种含义:
    public class Meaning {
    PartOfSpeach p;
    String definition;
    List<Word> synonyms; // synonyms belong to a particular *meaning* of a Word.
    }

    关于java - 在任意事物的列表(数组)中创建关联的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17737339/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com