Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【Go言語】map
Search
Tomoki Ota
August 16, 2024
Programming
0
18
【Go言語】map
mapについて解説しています
Tomoki Ota
August 16, 2024
Tweet
Share
More Decks by Tomoki Ota
See All by Tomoki Ota
アーキテクチャの価値
tomo1227
0
18
アーキテクチャとビジネスロジック
tomo1227
0
17
【Go言語】テスト
tomo1227
0
12
【Go言語】クロージャ
tomo1227
0
120
【Go言語】イテレータ
tomo1227
0
12
【Go言語】エラーハンドリング
tomo1227
0
16
AIに淘汰されないようにするには?
tomo1227
0
20
【Go言語】range
tomo1227
0
9
【Go言語】break
tomo1227
0
9
Other Decks in Programming
See All in Programming
役立つログに取り組もう
irof
27
8.9k
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
240
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
5
790
WEBエンジニア向けAI活用入門
sutetotanuki
0
310
Quine, Polyglot, 良いコード
qnighy
4
530
Sidekiqで実現する 長時間非同期処理の中断と再開 / Pausing and Resuming Long-Running Asynchronous Jobs with Sidekiq
hypermkt
6
2.8k
僕がつくった48個のWebサービス達
yusukebe
18
17k
CSC509 Lecture 08
javiergs
PRO
0
110
Tuning GraphQL on Rails
pyama86
2
1.2k
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
680
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
500
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
140
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
31
6.3k
Optimizing for Happiness
mojombo
376
69k
Agile that works and the tools we love
rasmusluckow
327
21k
Thoughts on Productivity
jonyablonski
67
4.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
160
How to train your dragon (web standard)
notwaldorf
88
5.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Become a Pro
speakerdeck
PRO
24
5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
A Philosophy of Restraint
colly
203
16k
Transcript
Tomoki Ota ʲGoݴޠʳmap
mapͱ? 2
mapͱʁ 3
mapͱʁ 4
mapͱʁ GoͰɺmapϋογϡςʔϒϧͷσʔλߏʹجͮ͘ 5
mapͱʁ ෦తʹϋογϡςʔϒϧɺόέοτͷϙΠϯλͷྻ ֤όέοτΩʔͱͷϖΞΛ8ͭ࣋ͭ 6
mapͷϋογϡςʔϒϧ map[string]intͷόέοτ0ʹͨ͠ϋογϡςʔϒϧදݱͷྫ 7 hash(“two") = 0
ཁૉͷૠೖ 8 ผͷཁૉͷ map[string]intͷόέοτ0ʹͨ͠ϋογϡςʔϒϧදݱͷྫ
ཁૉͷૠೖ(όέοτ͕͍ͬͺ͍ͷͱ͖) 9
ಡΈग़͠ɺߋ৽ɺআͷܭࢉྔ 10 Λόέοτͷ૯ͱ͢Δͱɺ (σϑΥϧτ1ɺΦʔόϑϩʔ࣌ෳͷόέοτ) p ࠷ѱ࣌ؒܭࢉྔ ͱͳΔ O(p)
ॳظԽ
ॳظԽ
100ສݸͷཁૉͷՃ Ϛοϓ͕ࣗಈͰ֦େͯ͠ɺόέοτΛอ࣋͢Δྻ͕2ഒͱͳΔ
Ϛοϓ͕֦େ͢Δ݅ ྻͷཁૉ͝ͱʹόέοτ͕อ࣋͢Δཁૉͷฏۉ(Load Factor)͕ ͋Δఆ(ݱঢ়6.5ɻ80%)ΑΓେ͖͍ͱ͖ Φʔόʔϑϩʔ͍ͯ͠Δྻͷཁૉ͕ͱͯେ͖͍ͱ͖
Ωʔͷૠೖͷܭࢉྔ 15 Ϛοϓ͕֦େ͢Δͱ͖ɺશͯͷΩʔ͕શͯͷόέοτ࠶ஔ͢Δɻ ΛϚοϓͷཁૉͷ૯ͱ͢Δͱ n ࠷ѱ࣌ؒܭࢉྔ ͱͳΔ O(n)
ॳظԽ 16 makeͰॳظԽ͢Δ
ॳظԽ 17
ॳظԽ 18 αΠζnΛࢦఆ͢ΔͱɺGoϥϯλΠϜʹগͳ͘ͱnݸͷཁૉΛ อ࣋Ͱ͖ΔϚοϓΛׂΓͯΔΑ͏ʹཁٻ͢Δɻ ❌ ࠷େnݸͷཁૉΛ࣋ͭϚοϓΛ࡞Δ
mapͱϝϞϦʔϦʔΫ
mapͱϝϞϦʔϦʔΫ
mapͱϝϞϦʔϦʔΫ 1. ۭϚοϓΛׂΓͯΔ 2. 100ສݸͷཁૉΛՃ͢Δ 3. શͯͷཁૉΛऔΓআ͍ͯɺGCΛ࣮ߦͤ͞Δ 4. ֤εςοϓͷޙɺώʔϓͷେ͖͞(Mb)Λදࣔ
mapͱϝϞϦʔϦʔΫ 1. ۭϚοϓΛׂΓͯΔ 2. 100ສݸͷཁૉΛՃ͢Δ 3. શͯͷཁૉΛऔΓআ͍ͯɺGCΛ࣮ߦͤ͞Δ 4. ֤εςοϓͷޙɺώʔϓͷେ͖͞(Mb)Λදࣔ
mapͱϝϞϦʔϦʔΫ 1. ۭϚοϓΛׂΓͯΔ 2. 100ສݸͷཁૉΛՃ͢Δ 3. શͯͷཁૉΛऔΓআ͍ͯɺGCΛ࣮ߦͤ͞Δ 4. ֤εςοϓͷޙɺώʔϓͷେ͖͞(Mb)Λදࣔ
GoͷϚοϓruntime.hmapߏମͷϙΠϯλɻ ͜ͷߏମʹɺϚοϓͷόέοτΛࣔ͢BϑΟʔϧυͳͲෳͷϑΟʔϧυ͕͋Δɻ mapͱϝϞϦʔϦʔΫ
mapͱϝϞϦʔϦʔΫ
100ສݸͷཁૉΛՃ͢Δ → Bͷ18ɺ όέοτͱͳΔ 100ສݸͷཁૉΛऔΓআ͘ → B18ͷ··ɻΏ͑ʹɺϚοϓ·ͩಉ͡ͷόέοτΛอ࣋͢Δ 218 = 262144
mapͱϝϞϦʔϦʔΫ
mapͱϝϞϦʔϦʔΫ 1࣌ؒͷσʔλΛอଘ͢Δͱ͢ΔɻେنͳϓϩϞʔγϣϯΛߦ ͏߹ɺ1࣌ؒޙʹɺඦສਓͷ͓٬༷͕γεςϜʹଓ͢Δ͔ ͠Εͳ͍ɻ͔͠͠ɺϓϩϞʔγϣϯͷޙɺϐʔΫ࣌ͱಉ ͡ͷόέοτ͕Ϛοϓʹอ࣋͞Εͨ··ʹͳΔɻ͜ͷΑ͏ͳγ φϦΦͷ߹ɺϝϞϦͷফඅྔ͕େ෯ʹݮগͤͣɺϝϞϦͷফඅ͕ ଟ͘ͳΔɻ
ݱࡏͷϚοϓͷίϐʔΛఆظతʹ࠶࡞͢Δ mapܕ͕ྻͷϙΠϯλΛอ࣋͢ΔΑ͏ʹมߋ͢Δ ख࡞ۀͰ࠶ىಈͨ͘͠ͳ͍߹
͓·͚
͓·͚ όέοτʹ8ݸ·Ͱ֦େ͞Ε͍ͯΔͱ͜Ζʹɺ্ͷΑ͏ʹΞαΠϯ͢Δ߹Λߟ͑Δ
͓·͚
͓·͚
͓·͚ 1. ϋογϡͷੜ 2. ֨ೲ͢Δόέοτͷબ 3. tophashͷੜ 4. tophashΛར༻ͯ͠ॻ͖ࠐΉ͖ϝϞϦҐஔΛಛఆ 5.
৽͍͠όέοτͷՃͱνΣʔϯ
ϋογϡͷੜ
֨ೲ͢Δόέοτͷબ
tophashͷੜ
tophashͷੜ
tophashΛར༻ͯ͠ॻ͖ࠐΉ͖ϝϞϦҐஔΛಛఆ
৽͍͠όέοτͷՃͱνΣʔϯ