Vb.net 最佳且简单的数据结构

Vb.net 最佳且简单的数据结构,vb.net,Vb.net,我正在尝试在vb.net中创建以下矩阵,以便在处理过程中可以获得字母表的匹配分数,例如: A和N的匹配是什么?我将查看我的内置矩阵并返回-2 同样,P和L的匹配是什么?我将查看我的内置矩阵并返回-3 请告诉我该怎么做,我正在尝试使用嵌套字典,如下所示: Dim myNestedDictionary As New Dictionary(Of String, Dictionary(Of String, Integer))() Dim lTempDict As New Dictionary(Of St

我正在尝试在vb.net中创建以下矩阵,以便在处理过程中可以获得字母表的匹配分数,例如: A和N的匹配是什么?我将查看我的内置矩阵并返回-2 同样,P和L的匹配是什么?我将查看我的内置矩阵并返回-3

请告诉我该怎么做,我正在尝试使用嵌套字典,如下所示:

Dim myNestedDictionary As New Dictionary(Of String, Dictionary(Of String, Integer))()
Dim lTempDict As New Dictionary(Of String, Integer)
lTempDict.Add("A", 4)
myNestedDictionary.Add("A", lTempDict)
另一种方法是从基于文本的文件中读取矩阵,然后填充二维数组

谢谢



(来源:)

使用二维数组,为字母表创建一个映射作为枚举,该枚举也将用作数组的索引:

public enum AlphaBet
{
   A = 0,
   R = 1,
   ...
}

// Init the array
int[][] scores = ...;

int score = scores[AlphaBet.A][AlphaBet.N]; // score = -2

取一个将字符映射到int的字典。int必须是连续的。然后以2d数组为例,就是这样。首先,您可以在字典中查找两个字符的索引,然后转到数组,我认为使用带有两个字符键的非嵌套字典会更简单

myDictionary.add("AA", 4)

为什么要创建枚举而不是简单地使用
char
作为键?@Frederic-我不明白。如何使用
char
作为键?我想这是因为使用的字符数量有限。构建一个覆盖A-Z中所有字符的数组会消耗太多内存。另一种方法是使用索引查找方法,只存储所用字符的索引,然后。。。。这正是Enum提供的功能。@Frederic-这样您就可以将数组索引引用为字母表位置。@Oded:是的,我后来意识到您为什么要这么做;我以前浏览代码的速度太快了。这是有道理的(即使我自己可能会选择另一种解决方案)。你介意与我们分享一下你将使用它的目的吗?这是正确的,但考虑到数据的大小,我认为分类列表可能会做得更好。谢谢Carl,这绝对是“简单”的解决方案,适用于我目前的情况。但是它是对匹配值进行硬编码的,如果我的矩阵随着时间的推移而变化,该怎么办。@anshu,嵌套字典如何更好地处理随时间的变化?我看不出用这种方法处理它的优点或困难。如果AA更改为保持7而不是4,您只需更改它。“但我可能误解了。”卡尔,我同意你的说法。实际上,我需要从输入文本文件(包含矩阵)中读取值,然后循环执行以下操作:myDictionary.add(“AA”,4)等等。