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
いつか役にたつかもしれないコレクション周りの5つのこと
Search
RyotaMurohoshi
July 05, 2016
Programming
800
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
いつか役にたつかもしれないコレクション周りの5つのこと
2016//07/05(火)に開催された「Kotlin 勉強会 #1 - 初めての Kotlin」で発表した資料です
http://connpass.com/event/33584/
RyotaMurohoshi
July 05, 2016
More Decks by RyotaMurohoshi
See All by RyotaMurohoshi
Tilemapのアップデートについて
ryotamurohoshi
0
87
Unityの合同同人誌や合同商業誌を書いてる僕は感想やレビューや評価が欲しい
ryotamurohoshi
0
610
Unity 2021.1での Unityパッケージの名称変更について
ryotamurohoshi
0
870
Odin Validationはいいぞ!
ryotamurohoshi
2
1.1k
Tilemapはいいぞ!2020 〜すごいぞ、プロジェクト専用拡張Brush〜
ryotamurohoshi
0
2.5k
Unityでも、新しいC#
ryotamurohoshi
0
1.5k
Riderはいいぞ!
ryotamurohoshi
1
3.8k
Riderのススメ〜俺はRiderここが好き〜
ryotamurohoshi
1
2.7k
Unity開発者に伝えたい.NETのこと
ryotamurohoshi
4
38k
Other Decks in Programming
See All in Programming
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
420
1B+ /day規模のログを管理する技術
broadleaf
0
130
どこまでゆるくて許されるのか
tk3fftk
0
470
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
480
初めてのKubernetes 本番運用でハマった話
oku053
0
120
えっ!!コードを読まずに開発を!?
hananouchi
0
170
Creating Composable Callables in Contemporary C++
rollbear
0
200
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
220
スマートグラスで並列バイブコーディング
hyshu
0
290
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
140
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
260
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
350
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Navigating Weather and Climate Data
rabernat
0
300
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
So, you think you're a good person
axbom
PRO
2
2.1k
We Are The Robots
honzajavorek
0
270
Designing for Timeless Needs
cassininazir
1
290
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
Odyssey Design
rkendrick25
PRO
2
730
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
Transcript
ผʹܶతʹมΘΒͳ͍͚ΕͲ ͍͔ͭʹ͔ͨͭ͠Εͳ͍ ίϨΫγϣϯपΓͷ5ͭͷ͜ͱ @RyotaMurohoshi 2016/07/05(Ր)*͡ΊͯͷKotlin
ͦͷ1 ঢ়گʹԠͯ͡SequenceΛ͏͖ͳ݅
100000ߦͷJSON'LinesϑΝΠϧ ͜ΕΛ1ߦͣͭdataΫϥεͷΦϒδΣΫτʹม͠ ͋Δ݅Λຬͨ͢ΦϒδΣΫτΛ ࠷ॳ͔Β10͚݅ͩ֬ೝද͍ࣔͨ͠
List<T>ͷ߹
val lineList: List<String> = File("data.jsonlines").readLines() val result = lineList .map
{ convertToData(it) } .filter { filterData(it) } .take(10) for (it in result) { println(it) }
࠷ޙ·ͰϑΝΠϧΛಡΜͰ͠·͏
Sequence<T>ͷ߹
val result: List<PersonData> = File("data.jsonlines") .useLines { lineSequences: Sequence<String> ->
lineSequences .map { convertToData(it) } .filter { filterData(it) } .take(10) .toList() } for (it in result) { println(it) }
ϑΝΠϧΛ࠷ޙ·Ͱಡ·ͳ͍
ৄ͘͜͠ͷࢿྉͰʂ h"ps:/ /speakerdeck.com/ryotamurohoshi/sequencefalsehua8kotlin8dot8sequences8dot8sequence
ͦͷ2 ཁૉ͕ۭͷ࣌ͷaverageϝιου͕ 0.0Λฦͯ͠͠·͏݅
averageϝιουͱʁ List<Int>ͱ͔ͷฏۉܭࢉϝιου
͡Ό͋ɺཁૉ͕ۭͷ࣌ʁ
·͔͞ͷ0.0!
ͳͥͩʂʁ
͜Ε͡Όܭࢉ݁Ռ͕0.0ͩͬͨͷ͔ɺ ཁૉ͕ۭ͔ͩΒ0.0ͬͨͷ͔ ۠ผԽ͔ͭͳ͍ʂʂʂ
ͦͦͳͥDouble?ܕʹ͠ͳ͔ͬͨͷ͔ʁ maxminInt?Λฦ͢ͷʹʂ ͘͠ྫ֎Λ͛ͯཉ͍͠
ͦͷ3 Ωʔ͕ॏෳͨ͠ࡍͷassociateܥϝιου͕ɺ ྫ֎Λ͛ͳ͍݅
associateܥͷϝιουͱʁ Listͱ͔͔ΒMapΛͭ͘Δϝιου
data class Person( val id: Long,ɹval name: String, val teamId:
Long) // ॏෳidͷPersonଘࡏ͠ͳ͍ // ಉ͡teamIdΛ࣋ͭPersonଘࡏ͠͏Δ val personList : List<Person>ɹ= loadPersonList() // id͕ॏෳ͠ͳ͍ͷͰແ͠ val personMap : Map<Long, Person> = personList.associateBy { it.id } // ʲʂʂʂʳಉ͡teamIdΛͭཁૉ͕personListʹଘࡏ͠͏Δʂʂʂʂʂ val teamMap : Map<Long, Person> = personList.associateBy { it.teamId }
͠Key͕ॏෳͨ͠Βʁ
ޙউʂ ͋ͱ͕ͪ:ޙΖͷཁૉͰ্ॻ͖
ݸਓతʹྫ֎Λ͛ͯཉ͍͠
ͦͦMapΛͭ͘ͷͰ͋ΕɺKeyҰҙͳͷͳͣ Key͕ॏෳ͢ΔͷΛఆ͢ΔͳΒɺgroupByΛ͏͖
ಥવͷએ
C#ͷLINQޓͷϥΠϒϥϦ KotLinq࡞͍ͬͯ·͢ʂʂʂ h"ps:/ /github.com/RyotaMurohoshi/KotLinq
ࠓճͷTips KotLinqΛ࡞͍ͬͯΔࡍͷݟͰ͢
ͦͷ4 σϑΥϧτΠϯϙʔτ֦ுؔΛ ্ॻ͖Ͱ͖Δ݅
ࣗ࡞ϥΠϒϥϦKotLinqͷʹ takeͬͯϝιου͕͋Γ·͢ʂ
KotLinqͷtakeϝιου fun <TSource> Iterable<TSource>.take(count: Int): Sequence<TSource> = asSequence().take(count)
Μʁ
ඪ४ؔʹtakeͬͯ͋ͬͨΑ͏ͳ? fun <T> Iterable<T>.take(n: Int): List<T>
ඪ४ͰΠϯϙʔτͰ͖Δ֦ுؔ Λ্ॻ͖Ͱ͖Δ݅ʂ
ͦͷ5 ϝιουͷΦʔόʔϩʔυͱit͕ ૬ੑѱ͍݅ (͜Ε͋Μ·ΓίϨΫγϣϯؔͳ͍)
ࣹӨϝιου!ͱ!ΠϯσοΫε͖ࣹӨϝιουೋͭ࡞Γ͍ͨ // ࣹӨϝιου fun <TSource, TResult> Sequence<TSource> .select(selector: (TSource) ->
TResult): Sequence<TResult> // ΠϯσοΫε͖ࣹӨϝιου fun <TSource, TResult> Sequence<TSource> .select(selector: (TSource, Int) -> TResult): Sequence<TResult>
ࣹӨϝιου!ͱ!ΠϯσοΫε͖ࣹӨϝιου ҰҙʹܾΊΒΕͳ͍͔ΒίϯύΠϧΤϥʔ sequenceOf(1, 2, 3).select { it * 2 }
KotLinq(ͰɺΠϯσοΫε͖ࣹӨϝιουΛ ผ໊ʹ͠·ͨ͠ sequence.select { it * it }!ͱ͔͍ͨ͠͠
·ͱΊ • ঢ়گʹԠͯ͡SequenceΛ͏͖ͳ݅ • ཁૉ͕ۭͷ࣌ͷaverageϝιου͕0.0Λฦͯ͠͠·͏݅ • Ωʔ͕ॏෳͨ͠ࡍͷassociateܥϝιου͕ྫ֎Λ͛ͳ͍݅ • σϑΥϧτΠϯϙʔτ֦ுؔΛ্ॻ͖Ͱ͖Δ݅ •
ϝιουͷΦʔόʔϩʔυͱit͕૬ੑѱ͍݅
·ͱΊ KotLinqʹΛ