webForumDet fria alternativet

Spel med stor ordlista

.NET

1 svar · 283 visningar · startad av me01avd

Medlem sedan apr. 200418 inlägg
Frågan#1

Halloj,

sitter ett par stycken och utvecklar ett spel i asp.net. spelet fungerar som alfapet ungefär, där varje spelare matar in ett eller flera ord. varje ord ska sedan kontrolleras om de är giltiga på något sätt mot en stor ordlista. när ordet/orden är godkända blir det nästa spelares tur.

ordlistan består av ca 50 000 ord som ligger i en txt-fil. har även lyckats lägga in textfilen i två tabeller (delat upp den på hälften ungefär) i en databas.

eftersom det sker väldigt många sökningar i ordlistan undrar vi vad som är smidigast och smartaste lösningen, ska man läsa in hela ordlistan till en hashtabell? har provat det och det går väl hyfsat snabbt.. eller är det bättre att ha ordlistan i en databas (använder ms access) med flera tabellen, typ en för varje bokstav, eller en för a-f, en för g-l osv...

Eller finns det någon annan bättre lösning? tacksam för alla förslag.

/Andreas Viklund
UMEÅ

Medlem sedan maj 20012 812 inlägg
#2

Det borde gå snabbast med en HashTabell som ligger i minnet. Det beror dock på hur väl optimerad den är för den antalet poster som du har, samt hur de plockar fram vart just ditt ord finns.

Tycker dock att en HashTable.Contains("kalle") borde vara snabbare än att gå till en databas och få tillbaka en träff om ordet finns i listan.

Om du vill ha det i en databas, så rekomenderar jag dig att titta på MSDE, som är en gratis variant av MS SQL Server, fungerar nästan på exakt samma vis, finns några begränsningar. Där kan du göra en SP med 2 Parameters, en som tar emot ordet och en som skickar tillbaka true/false. Alla orden lägger du sedan i EN tabell och sätter index på den. Det blir bäst om du vill använda en databas.

Jag hade dock kollat upp ordentligt på metoden med HashTabell eller någon annan lista som finns i .NET. Det finns några olika. Som du sedan lägger i cachen och låter alla dina användare kolla sina ord emot, det måste vara den snabbaste och mest skalbara lösningen.

- Magnus

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)