2010-03-15 8 views
8

J'essaie de créer la matrice ci-dessous dans mon vb.net donc pendant le traitement je peux obtenir les scores de correspondance pour les alphabets, par exemple: Quel est le match pour A et N ?, Je vais regarder dans ma matrice intégrée et retourner -2 De même, Quelle est la correspondance pour P et L ?, Je vais regarder dans ma matrice intégrée et de retour -3Meilleure et simple structure de données

S'il vous plaît me suggérer comment y arriver, je tentais de l'utilisation du dictionnaire imbriqué comme ceci:

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) 

l'autre façon pourrait être est de lire la matrice à partir d'un fichier basé sur le texte, puis remplir les deux dimens réseau ionique.

Merci.

alt text http://www.clcbio.com/scienceimages/img8.png

+0

Pourriez-vous partager avec nous sur ce que vous allez utiliser pour cela? – chakrit

Répondre

5

Je pense qu'il serait plus simple d'utiliser un dictionnaire non imbriqué avec des clés à deux caractères.

myDictionary.add("AA", 4) 
+0

+1 J'étais sur le point de le suggérer. –

+0

Même pensée ici. – chakrit

+0

Sur la bonne voie, mais étant donné la taille des données, je pense qu'un SortedList pourrait faire mieux. –

3

Utilisez un tableau à deux dimensions et créer un mappage pour votre alphabet comme une énumération qui sera également servir d'index dans les tableaux:

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

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

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

Pourquoi créer une énumération au lieu d'utiliser simplement char comme clé? –

+0

@Frederic - Je ne suis pas. Comment utiliseriez-vous 'char' comme clé? – Oded

+0

Je suppose que c'est parce qu'il y a un nombre limité de caractères utilisés. Construire un tableau qui couvre tous les caractères de A à Z consomme trop de mémoire. L'alternative est alors d'utiliser une approche de recherche indexée, en ne stockant que des index sur les caractères qui sont utilisés, mais alors ... c'est exactement ce qu'offre Enum. – chakrit

1

prendre un dictionnaire qui associe char int . les ints doivent être séquentiels. alors prenez le tableau 2d, c'est tout. d'abord vous regardez dans le dictionnaire pour l'index pour les deux caractères puis allez au tableau

Questions connexes