文字列スライスのサブセット間の区別を見つける
ある文字列スライスのサブセットを別の文字列スライスのサブセットと区別する要素を確認するには、次のことを考慮してください。問題:
<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 サイトの他の関連記事を参照してください。