Hej, Tyvärr är vb dåligt lämpat för den här typen av uppgifter, många språk har vettiga strukturer för detta native, och jag är osäker på om Collection löser detta snyggt. Roade mig med att lösa ditt problem med denna gammaldags Stright Forward lösning som funkar. Lite trixigare variant med generics (lite fånigt mellansteg men ids inte fixa): Fast det här är vb6, inte vb.net. Hade det varit i vb.net hade jag använt någon typ av hashtabell ("HashMap" heter det väl?), som gör det hundra gånger snyggare och enklare. Har ändrat min kod ovan. På raden  Det snyggaste hade ju varit i språk som stöder olika typer av maps, här C++:Sökmotor i VB
    
    
Jag skulle behöva hjälp med följande:
Jag vill ha en funktion som ger ut en array innehållande ord i den ordning de förekommer i en text sträng, exempel:
Textsträng: "hej jag behöver hjälp med hjälp nu jag jag jag"
Array tillbaka: "jag:4, hjälp:2, hej:1, behöver:1, med:1, nu:1"
<CODE>
Public Function GetWordList(ByVal inText as String) as Variant
' Hur fan gör jag här!?!? ;-)
End Function
</CODE>Sv: Sökmotor i VB
    
    
Antingen kör du med en Array(Array()), men det är inte så snyggt. Jag skulle föredra att göra en egen datatyp här:
<code>
Public Type SearchResult
text As String
count As Long
End Type
</code>
Sen något i stil med (pseudo, du får fixa detaljerna själv):
<code>
Public Function GetWordList(ByVal inText as String) as Variant 
dim results() as SearchResult
a = Split(inText, " ")
for each str in a
if str in results 
sr(str).count = sr(str).count +1
else 
sr.add(str, 1)
end if
next
End Function
</code>
Det är lite trix med Redim etc., alternativt köra med arrayer, alternativt kolla på Collections.Sv:Sökmotor i VB
    
    
Vill du ha det sorterat på ett speciellt sätt så återkom. Testa denna lösning mot en ListBox.
<code>
Option Explicit
Private Sub Command1_Click()
 Dim retArray() As String, i As Long
   retArray = Split(GetWordList("LCase(hej jag behöver hjälp med hjälp nu jag jag jag")), ",")
'***************************************************************************************************
   For i = 0 To UBound(retArray) -1  ' Har gjort denna Listbox för att du skall kunna
     List1.AddItem retArray(i)           ' kolla att Functionen gör rätt.
   Next i                                       ' Listboxen simulerar din GetWordList  ut Variant Array
End Sub                                       ' Du får sortera arrayen efter behov
Public Function GetWordList(ByVal inText As String) As String
Dim splitTxt() As String
Dim i As Long, j As Long, wCount As Long
Dim wTest As String, retStr As String
                      splitTxt = Split(inText, " ")
               For i = 0 To UBound(splitTxt)
                        wCount = 0
                          wTest = splitTxt(i)
            If wTest <> "" Then
                 For j = 0 To UBound(splitTxt)
                       If wTest = splitTxt(j) Then
                            wCount = wCount + 1
                         splitTxt(j) = ""
                       End If
                 Next 'j
                       retStr = retStr & wCount & " : " & wTest & ","  ' sortera efter antal
             End If
               Next 'i
                       GetWordList = retStr
End Function
</code>Sv: Sökmotor i VB
    
    
Private Function GetWordList(ByVal inText As String) As System.Collections.Generic.List(Of ordräknare)
        Dim d As New System.Collections.Generic.Dictionary(Of String, Integer)
        ' harva genom listan med ord
        For Each ord As String In inText.Split(" ")
            If Not d.ContainsKey(ord) Then
                d.Add(ord, 0)
            End If
            d(ord) += 1
        Next
        ' skapa lista med ordräknare-objekt 
        Dim l As New System.Collections.Generic.List(Of ordräknare)
        ' skapa ordräknare-objekt för varje funnet ord och dess antal förekomster
        For Each kv As System.Collections.Generic.KeyValuePair(Of String, Integer) In d
            Dim o As New ordräknare
            o.antal = kv.Value
            o.text = kv.Key
            ' lägg det nya objektet i listan
            l.Add(o)
        Next
        ' sortera listan och returnera den
        l.Sort(New ordräknareComparer())
        Return l
    End Function
    Private Structure ordräknare
        Public text As String
        Public antal As Integer
    End Structure
    Private Class ordräknareComparer
        Implements IComparer(Of ordräknare)
        Public Function Compare(ByVal x As ordräknare, ByVal y As ordräknare) As Integer Implements System.Collections.Generic.IComparer(Of ordräknare).Compare
            Return x.antal > y.antal
        End Function
    End Class
    Sv:Sökmotor i VB
    
    Sv:Sökmotor i VB
    
    
<b> retArray = Split(GetWordList(LCase("hej jag behöver hjälp med hjälp nu Jag jag jag")), ",")</b>
LCase har tillkommit
Både ("Jag" och "jag") räknas i samma batch blir (4 jag)
Tycker att min lösning är snygg. Vad tycker Ni. ;-)
Förmodligen tycker Ni som tar betalt för antal programrader att det är skit.Sv: Sökmotor i VB
    
    
string s = "hej jag behöver hjälp med hjälp nu Jag jag jag", tmp;
stringstream ss(s);
map<string, size_t> occurences;
ss >> tmp;
while(!ss.eof()){
  occurences[tmp]++;
  ss >> tmp;
}
Ännu snyggare med vettig användning av färdiga STL-style-algoritmer, eller i språk som haskell eller Ruby, där array-hantering är mer naturlig.
Typ (Ruby):
<code>
words = "apa apa gris"
freqs = Hash.new(0)
words.split(" ").each { |word| freqs[word] += 1 } 
</code>
freqs innehåller nu hela listan räknad... (prova själv på http://tryruby.hobix.com/).