【发布时间】:2018-03-20 23:39:11
【问题描述】:
我正在构建一个翻译器,它将翻译保存在字典中,其中第一个字符串是标识符,第二个字符串是翻译后的字符串。
在我看来,字典语法不是很可读,所以我正在考虑像这样包装我的字典
class Translation : Dictionary<string,string>{}
然后也是键值对
class SingleTranslation : KeyValuePair<string,string>
但是 KeyValuePair 类是密封的(不能被继承)。有人对如何使我的字典更具可读性有任何建议吗?
我最大的担心是当我不得不遍历字典时
foreach(KeyValuePair<string,string> kvp in _translation)
{
string whatever = kvp.Value;
do stuff...
if(kvp.key)
do stuff..
}
我当然可以在 foreach 中创建一个称为 Identifier 的字符串并将其设置为等于 kvp.key。但我更喜欢类似的东西
foreach(SingleTranslation singleTranslation in _translation)
{
singleTranslation.Identifier ... do stuff...
}
【问题讨论】:
-
“环绕”——这听起来像是作曲。您可以创建一个由字典支持的类,并通过底层字典公开您想要的功能
-
如果你使用
var,大部分噪音都会消失。foreach (var kvp in _translation)...并且Identifier比Key好得多,其他阅读您的代码的人会理解吗?另外,您为什么要遍历整个字典?如果您访问模式主要是顺序的,只需使用List<SingleTranslation>。如果您真的关心大小和速度,您可以使用 TernaryTree 代替,这是许多单词词典使用的。 -
“更具可读性”对您意味着什么?
-
@Dennis Kuypers:当然,通过一些额外的工作,我可以使它与迭代器一起工作,并重载 [] 运算符..
-
@Ian Mercer:我同意 key 和 identifier 是可互换的词,在这种情况下它们都很好。我正在遍历整个字典,因为我将它发送到一个嵌入式软件单元。我认为我的查找功能将来会很方便,这就是我选择字典的原因
标签: c# dictionary readability