Удаление повторяющихся слов из строки в golang

#go

#Вперед

Вопрос:

у меня есть строка в golang :

«привет, привет, привет, привет»

Я хотел бы удалить дубликаты word, чтобы сохранить только один, чтобы получить это :

«привет, привет»

Ответ №1:

Для достижения этой цели существует несколько способов. Одним из них является это:

 import "strings"

func Dedup(input string) string {
    unique := []string{}

    words := strings.Split(input, " ")
    for _, word := range words {
        // If we alredy have this word, skip.
        if contains(unique, word) {
            continue
        }
 
        unique = append(unique, word)
    }
 
    return strings.Join(unique, " ")
}
 
func contains(strs []string, str string) bool {
    for _, s := range strs {
        if s == str {
            return true
        }
    }
    return false
}
  

Комментарии:

1. Dedup("high hi hi hi ho ho hello") удаляет все экземпляры «hi» ( запустите его на игровой площадке ).

2. пользователь462794 посмотрите на отредактированный код, сообщение было неверным, как прокомментировал @MuffinTop.

Ответ №2:

 package main
import "fmt"

func removeDuplicates(arr []string) []string {
    words_string := map[string]bool{}
    for i:= range arr {
        words_string[arr[i]] = true
    }
    desired_output := []string{}  // Keep all keys from the map into a slice.
    for j, _ := range words_string {
        desired_output = append(desired_output, j)
    }
    return desired_output
}
func main() {
    arr := []string{"hi", "hi", "hi", "ho", "ho", "hello"}
    fmt.Println(arr)
    desired_output := removeDuplicates(arr)  // Remove the duplicates
    fmt.Println(desired_output)
}
  

Комментарии:

1. Здесь только одна проблема, которую я вижу, связана с порядком извлечения. При получении конечных результатов порядок не поддерживается.