ホームページ > バックエンド開発 > Golang > Go で 2 つの文字列スライス間の違いを効率的に見つけるにはどうすればよいですか?

Go で 2 つの文字列スライス間の違いを効率的に見つけるにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-09 05:27:13
オリジナル
403 人が閲覧しました

How Can I Efficiently Find the Difference Between Two String Slices in Go?

文字列スライスのサブセット間の区別を見つける

ある文字列スライスのサブセットを別の文字列スライスのサブセットと区別する要素を確認するには、次のことを考慮してください。問題:

<p>Here is my desired outcome</p>

<pre class="brush:php;toolbar:false">slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}

difference(slice1, slice2)
=> ["hello"]

I need to determine the disparities between these two string slice sections!

ログイン後にコピー

解決策

この問題を解決する効率的なアプローチは、Go マップが約 ~O(1) の複雑さで動作することを前提としています。その結果、提案された差分関数は、おおよその複雑さ ~O(n) でソートされていないスライス上で動作します。

// difference returns the elements in `a` that aren't in `b`.
func difference(a, b []string) []string {
    mb := make(map[string]struct{}, len(b))
    for _, x := range b {
        mb[x] = struct{}{}
    }
    var diff []string
    for _, x := range a {
        if _, found := mb[x]; !found {
            diff = append(diff, x)
        }
    }
    return diff
}
ログイン後にコピー

マップを使用して要素のメンバーシップを効率的に決定することにより、差分関数は存在する要素を効果的に識別して分離します。一方のスライスには含まれるが、もう一方のスライスには含まれないため、文字列スライスのサブセット間の正確な比較が可能になります。

以上がGo で 2 つの文字列スライス間の違いを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート