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
0
1.4k
ImportedLinqのススメ
2019/05/22(水)に開催された Gotanda Unity #12の資料です。
RyotaMurohoshi
May 22, 2019
Tweet
Share
More Decks by RyotaMurohoshi
See All by RyotaMurohoshi
Unityの合同同人誌や合同商業誌を書いてる僕は感想やレビューや評価が欲しい
ryotamurohoshi
0
510
Unity 2021.1での Unityパッケージの名称変更について
ryotamurohoshi
0
700
Odin Validationはいいぞ!
ryotamurohoshi
2
940
Tilemapはいいぞ!2020 〜すごいぞ、プロジェクト専用拡張Brush〜
ryotamurohoshi
0
2.4k
Unityでも、新しいC#
ryotamurohoshi
0
1.3k
Riderはいいぞ!
ryotamurohoshi
1
3.4k
Riderのススメ〜俺はRiderここが好き〜
ryotamurohoshi
1
2.4k
Unity開発者に伝えたい.NETのこと
ryotamurohoshi
4
37k
ドキドキライブコーディング2019 #Burikaigi2019
ryotamurohoshi
1
1.1k
Other Decks in Technology
See All in Technology
非root化Androidスマホでも動く仮想マシンアプリを試してみた
arkw
0
140
AWS_MCP_Servers入門.pdf
naotoiso
0
180
計装を見直してアプリケーションパフォーマンスを改善させた話
donkomura
2
180
Azure × MCP 入門
ry0y4n
8
2k
4月15日の AZ 障害をテクサポの中の人目線で振り返ってみる
kazzpapa3
3
180
Next.jsと状態管理のプラクティス
uhyo
6
2.4k
ホワイトボックス& SONiC アーキテクチャ(全体像) - SONiC Workshop Japan 2025
ebiken
PRO
1
360
水耕栽培に全部賭けろ
mutsumix
0
150
計測による継続的なCI/CDの改善
sansantech
PRO
7
2.2k
人間性を捧げる生成AI時代の技術選定
yo4raw
1
920
使えるデータ基盤を作る技術選定の秘訣 / selecting-the-right-data-technology
pei0804
10
1.7k
PythonツールであるpygnmiをSONiCのgNMIに対して使ってみた
sonic
0
260
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
24
2.7k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
620
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
The Language of Interfaces
destraynor
158
25k
Why Our Code Smells
bkeepers
PRO
336
57k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
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のススメ