How to remove elements of a list that are repeated less than k times in VB.NET

1 Answer

0 votes
Imports System
Imports System.Linq
Imports System.Collections.Generic

Module ShortestRunProgram

	Function FilterByFrequency(lst As List(Of Integer), k As Integer) As List(Of Integer)
		' Count occurrences of each number
		Dim counts = lst.GroupBy(Function(x) x).
						 ToDictionary(Function(g) g.Key, Function(g) g.Count())

		' Keep only elements that appear at least k times
		Return lst.Where(Function(x) counts(x) >= k).ToList()
	End Function

    ' ------------------------------------------------------------
    ' MAIN PROGRAM
    ' ------------------------------------------------------------
    Sub Main()
		Dim lst As New List(Of Integer) From {
			1, 2, 2, 3, 3, 3, 4, 4, 4, 4,
			5, 5, 6, 7, 7, 7, 7, 8, 8, 8
		}

		Dim k As Integer = 3

		Dim result = FilterByFrequency(lst, k)

		Console.WriteLine(String.Join(", ", result))

    End Sub

End Module



' run:
'
'  3, 3, 3, 4, 4, 4, 4, 7, 7, 7, 7, 8, 8, 8
'

 



answered Feb 11 by avibootz
...