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
ImportedLinqのススメ
Search
RyotaMurohoshi
May 22, 2019
Technology
1.7k
0
Share
ImportedLinqのススメ
2019/05/22(水)に開催された Gotanda Unity #12の資料です。
RyotaMurohoshi
May 22, 2019
More Decks by RyotaMurohoshi
See All by RyotaMurohoshi
Tilemapのアップデートについて
ryotamurohoshi
0
83
Unityの合同同人誌や合同商業誌を書いてる僕は感想やレビューや評価が欲しい
ryotamurohoshi
0
600
Unity 2021.1での Unityパッケージの名称変更について
ryotamurohoshi
0
840
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 Technology
See All in Technology
大規模環境でどのように監視を実現する?
yuobayashi
1
260
freee-mcpを Local→Remote で出してわかった MCP認可実装のリアル
terara
3
880
【ハノーバーメッセ振り返りイベントat名古屋】データは集約からAI起点の収集に ~組織内・組織間でのデータ連携~
tanakaseiya
0
130
はじめてのAI-DLC
yoshidashingo
2
590
開発を止めない CI/CD ~CI Visibilityによる継続的最適化~
pensuke628
0
130
AIが変えた"品質の守り方"
kkakizaki
13
5k
long-running-tasks
cipepser
2
410
Python開発環境にハーネス適用を検討する
yuuka51
1
550
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
4
980
TROCCOで始めるクラウドコストを民主化するためのFinOps
tk3fftk
1
250
AI とサービス・デザイン / AI and Service Design
ks91
PRO
0
180
「使われるデータ基盤」を目指してデータアナリストとワークショップをやった話
jackojacko_
2
910
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
150
The untapped power of vector embeddings
frankvandijk
2
1.7k
Embracing the Ebb and Flow
colly
88
5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Code Review Best Practice
trishagee
74
20k
Facilitating Awesome Meetings
lara
57
6.9k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
210
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
44k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
~モンスターリストの中から一番レベルが高いやつ、どうやって見つける?~ @RyotaMurohoshi 2019/05/22(水) Gotanda.Unity #12 ImportedLinqのススメ
配列やリストを扱う「ロジック」の話をします みなさんのUnityプロジェクトにもありますよね? Unityゲーム開発で、よく出てきますね?
こんな感じのMonsterクラスがあります class Monster { public int Level { get; private
set; } /* 略 */ }
モンスターのリストがあります。 この中から30レベル以上のモンスターの数を数えたいです どんなコードを書けばいいですか? IReadOnlyList<Monster> monsterList = LoadMonsterList(); int targetMonsterCount =
???;
「LINQのCountメソッドを使う」
LINQのCountメソッドを使えば、短いし、読みやすいし、最高! IReadOnlyList<Monster> monsterList = LoadMonsterList(); int targetMonsterCount = monsterList.Count(it =>
it.Level >= 30);
次のロジック
モンスターのリストがあります。 この中から一番高いレベルの値を求めます。 どんなコードを書けばいいですか? IReadOnlyList<Monster> monsterList = LoadMonsterList(); int maxMonsterLevel =
???;
「LINQのMaxメソッドを使う」
LINQのMaxメソッドを使えば、短いし、読みやすいし、最高! IReadOnlyList<Monster> monsterList = LoadMonsterList(); int maxLevel = monsterList.Max(it =>
it.Level);
LINQ、超便利ですよね?
次のロジック
モンスターのリストがあります。 この中から「一番レベルの高いモンスター」を探します! どんなコードを書けばいいですか? IReadOnlyList<Monster> monsterList = LoadMonsterList(); Monster maxLevelMonster =
???;
これも「LINQのメソッドを使えば」 と、思いきや・・・
実はLINQにこれができるやつ 無い!
無いんです!
モンスターリストの中から一番レベルが高いやつ、 どうやって見つける? @RyotaMurohoshi 2019/05/22(水) Gotanda.Unity #12
自己紹介 • @RyotaMurohoshi(Twitter/GitHub) • 趣味ゲーム開発者 • UniBook。初回は2014年夏の「LINQのススメ」
おさらい
モンスターのリストがあります。 この中から「一番レベルの高いモンスター」を探します! どんなコードを書けばいいですか? IReadOnlyList<Monster> monsterList = LoadMonsterList(); Monster maxLevelMonster =
???;
これができるC#・LINQのメソッドが無い!
次のロジック
モンスターのリストがあります。 表示のために、先頭から8個ごとにグループ分けし、リストのリストを作りたいです。 どんなコードを書けばいいですか? IReadOnlyList<Monster> monsterList = LoadMonsterList(); var monsterListOfList =
???
これも一発でかけるC#・LINQのメソッドは無い!
無いんです!
次のロジック
モンスターのリストのリストがあります。 これを平滑化し、IEnumerable<Monster>なmonstersを作りたいです。 どんなコードを書けばいいですか? List<List<Monster>> monsterListOfList = LoadMonsterListOfList(); IEnumerable<Monster> monsters =
???
これは実はLINQを使って一行で書ける
SelectManyを使えば、リストのリストの平滑化は書ける・・・ List<List<Monster>> monsterListOfList = LoadMonsterListOfList(); IEnumerable<Monster> monsters = monsterListOfList.SelectMany(it =>
it);
書けるんだけど、個人的には微妙 SelectManyだと 「平滑化する」ってことが伝わりにくい
• モンスターのリストから一番高いレベルのモンスターを探したい • モンスターのリストを先頭からn個ごとにまとめたい • モンスターのリストのリストを平滑して、モンスターのシーケンスを作りたい こういう処理、 Unityゲーム開発でよくありますよね? C#で、LINQで一発で書けたら、読みやすいし嬉しくないですか?
実はですね・・・
Javaとか、Kotlinとか、F#とか、Haskellとか、 他のプログラミング言語にはあるんですよ こういうことが一発でできるメソッドが・・・
けれど、C#・LINQには そういうメソッドが無いんです!
無いんです!
他の言語のコレクションメソッドと比べて C#・LINQ、ちょっと弱いかも・・・ もっと充実していると嬉しい!充実させたい!
ということで作った!
ImportedLinq
「ImportedLinq」 「他の言語のコレクションで一般的だけど、C#・LINQにはないメソッド」を、 他のプログラミング言語から輸入(Imported)して、 C#・LINQにフィットするようにしたコレクションメソッドライブラリ
ImportedLinqの利用例を紹介!
「ImportedLinq」の利用例 : 「MaxBy」 モンスターのリストから、一番高いレベルのモンスターを探すコード。 IReadOnlyList<Monster> monsterList = LoadMonsterList(); // 型はIReadOnlyCollection<Monster>
// MaxByは一番大きい要素(複数)を探すメソッド var maxLevelMonsters = monsterList.MaxBy(it => it.Level);
「ImportedLinq」の利用例 : 「Buffer」 モンスターのリストを、8個ごとにグループ分けするコード。 IReadOnlyList<Monster> monsterList = LoadMonsterList(); // 型はIEnumerable<IReadOnlyList<Monster>>
// Bufferは先頭から指定数ごとにまとめるメソッド var bufferedMonsters = monsterList.Buffer(8);
「ImportedLinq」の利用例 : 「Flatten」 モンスターのリストのリストを平滑化し、IEnumerable<Monster>を作るコード。 List<List<Monster>> monsterListOfList = LoadMonsterListOfList(); // Flattenは、リストのリストなどをIEnumerable<T>に平滑化するメソッド
// 「平滑化するよ」ということがメソッド名から伝わる IEnumerable<Monster> monsters = monsterListOfList.Flatten();
• モンスターのリストから一番高いレベルのモンスターを探したい • モンスターのリストを先頭からn個ごとにまとめたい • モンスターのリストのリストを平滑して、モンスターのシーケンスを作りたい こういう処理、ゲーム開発でもよく書くじゃないですか? C#・LINQでは一発で書けないけれど、 「ImportedLinq」を使えば、一発で書けますよ!
ところで
「ImportedLinq」は 「便利なコレクションメソッドの詰め合わせ」 ではありません。
「ImportedLinq」 「他の言語のコレクションで一般的だけど、C#・LINQにはないメソッド」を、 他のプログラミング言語から輸入(Imported)して、 C#・LINQにフィットするようにしたコレクションメソッドライブラリ
他の言語の便利なコレクションメソッドを、C#er・Unity開発者にお届け! 他の言語に慣れている人の「C#になんでこのコレクションメソッド無いの」を解決!
あなたの「こんなの欲しかった」って コレクションメソッドがきっとあります! ぜひゲーム開発で役立ててください!
GitHub/NuGetで公開しました! 使ってね!感想待ってます!
続きはブログで! もしくは GitHubで!
よかったら☆をください! https://github.com/RyotaMurohoshi/ImportedLinq
~モンスターリストの中から一番レベルが高いやつ、どうやって見つける?~ @RyotaMurohoshi 2019/05/22(水) Gotanda.Unity #12 ImportedLinqのススメ