Faldt over en kodestump, der benytter LINQ / IEnumerable til at tælle frekvensen af ord i en sætning.
Den er noget hurtigere end de ArrayList og loops, man (læs jeg) ellers kan finde på at bruge til det samme.
I dette tilfælde benyttes den til at hente unikke tags fra en String og returnere dem med eller uden ordfrekvensen.
Der er et par mindre ændringer ifht den oprindelige version.
Den er noget hurtigere end de ArrayList og loops, man (læs jeg) ellers kan finde på at bruge til det samme.
I dette tilfælde benyttes den til at hente unikke tags fra en String og returnere dem med eller uden ordfrekvensen.
Function CountWords(ByVal TheSentence As String, Optional ByVal Split_Str As String = ",", _
Optional ByVal Return_with_counts As Boolean = False)
Dim str As String = ""
Dim WordCounts As IEnumerable = From TheWords In TheSentence.Split(Split_Str).ToList, _
DistinctWords In TheSentence.Split(Split_Str).ToList.Distinct.ToList _
Where TheWords.ToUpper = DistinctWords.ToUpper _
Group TheWords By DistinctWords Into CountsOfLetters = Group _
Select Word = DistinctWords, Number = CountsOfLetters.Count
If Return_with_counts = True Then
For Each i In WordCounts
str = str & ", " & i.Word.ToString & "(" & i.Number.ToString & ")"
Next
Return str & ","
Else
For Each i In WordCounts
str = str & ", " & i.Word.ToString
Next
Return Right(str, Len(str) - 1)
End If
End Function
Der er et par mindre ændringer ifht den oprindelige version.
Ingen kommentarer:
Send en kommentar