gpt4 book ai didi

oop - 使用条目字段作为键的字典数据结构

转载 作者:行者123 更新时间:2023-12-04 15:44:37 24 4
gpt4 key购买 nike

某种类型的数据记录经常必须由唯一键索引。通常它看起来像这样(我使用 C# 因为它是我最熟悉的语言,但这个问题并不是针对它的):

public class NamedRecord
{
public readonly string UniqueImmutableName;
...
}

public class UsesUsualDict
{

Dictionary<string, NamedRecord> myDict = new Dictionary<string, NamedRecord>();

void AddRecord(NamedRecord _NewRecord)
{
myDict[_NewRecord.UniqueImmutableName] = _NewRecord;
}

NamedRecord GetRecord(string _Key)
{
return myDict[_Key];
}

}

然而,这似乎有点多余:该字典中的键应始终被视为等于 NamedRecord.UniqueImmutableName ,但开发者最终自己维护这种关系。此外,这种数据重复对我来说并不合适。

有时我会看到类似的解决方案:数据记录甚至没有 UniqueImmutableName 作为其成员。例如,在他的 tutorial for D language , Andrei Alexandrescu 使用数据结构来描述剧中角色的单词统计:
struct PersonaData {
uint totalWordsSpoken;
uint[string] wordCount;
}

但是角色的名字甚至不在其中——它只是作为保存这些结构的字典的键可用。在那个上下文之外,这个数据结构几乎没有用。

我想做的是这样的:
public class UsesLambdaDict
{
LambdaDictionary<string, NamedRecord> myDict = new LambdaDictionary<string, NamedRecord>(NamedRecord _Record => _Record.UniqueImmutableName);

void AddRecord(NamedRecord _NewRecord)
{
myDict.Add(_NewRecord);
}

NamedRecord GetRecord(string _Key)
{
return myDict[_Key];
}
}

在我看来,这种处理此类数据记录的方式更好,因为 NamedRecord 的 UniqueImmutableName 成员与保存它的字典之间的关系在编译时已正式化。我看到的缺点是无法确保给定的 lambda 是纯函数,至少在 C# 中是这样。我不是很了解 D,但似乎 pure它所拥有的关键字也不能保证。

所以,我对此有几个问题:
  • 这甚至是一个真正的问题吗?我所拥有的第一个解决方案的缺点在某种程度上是理论上的 - 可能毕竟它没有任何问题。
  • 还有什么其他可能的方法来解决它?
  • 建议的解决方案还有哪些其他可能的缺点?
  • 最佳答案

    1.) 我不这么认为。

    2.) 使用带有键和值的结构,我认为不需要 lambda

    3.) 性能问题(缓存未命中)

    关于oop - 使用条目字段作为键的字典数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21041431/

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