Как я могу отсортировать список, используя расстояние Левенштейна в качестве критерия? - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь отобразить несколько строк в окне. Я вычислил расстояние Левенштейна для всех этих строк перед тем, как добавить их в список.

Теперь я хочу отсортировать список, начиная со строки с наименьшим расстоянием. Есть ли способ без использования второго списка? Я использую VB. NET.

Спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете передать пользовательский метод сравнения в метод сортировки списков.

Синтаксис подобен приведенному ниже, где «YourComparer» - это функция с вашей реализацией для сравнения двух строк, а «list» - это список строк.

list.Sort(Function(s1, s2) YourComparer(s1, s2))

«YourComparer» должен возвращать целочисленное значение с учетом двух строк, указывающее, должна ли первая строка располагаться до, после или иметь ту же позицию, что и вторая.

Ниже приведен пример реализации.

Private Function YourComparer(ByVal s1 As String, ByVal s2 As String) As Integer

    ' **** compare using your own implementation ****

    ' return less than zero if s1 should preceed s2
    ' return zero if s1 has same position in sort order
    ' return greater than zero if s1 should follow s2

    ' EXAMPLE using the length of strings to determine sort order
    ' Replace section with your own implementation
    If (s1.Length = s2.Length) Then Return 0 ' same position
    If (s1.Length > s2.Length) Then Return -1 ' should come before

    Return 1 ' should come after

End Function
...