はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

C#

【Unity】状態に応じてクラスの振る舞いを切り替えるStrategyパターンを学ぶ

はじめに 今回はアルゴリズムを切り替えるStrategyパターンについて紹介したいと思います。 クラス図 はじめに 概要 登場人物 実装例 さいごに 概要 wikipediaには以下のように表記されていました。 Strategy パターン(ストラテジー -)は、コンピューター…

【C#】最小頂点被覆問題の近似アルゴリズムを実装してみる

はじめに 今回は最小頂点被覆問題の近似アルゴリズムを実装してみたいと思います。最小頂点被覆問題の詳細は後述しますが、NP困難の問題と知られていて多項式時間で解くことできないことが証明されています。そういった解くことが難しい問題に関して、以下の…

【C#】インターフェイスの変換を行うAdapterパターンを学ぶ

はじめに 今回はインターフェイスの変換を行うAdapterパターンについて紹介したいと思います。 クラス図(左 : 継承を使ったもの, 右 : 委譲を使ったもの) はじめに 概要 登場人物 継承を使ったパターン 委譲を使ったパターン さいごに 概要 wikipediaには以…

【C#】命令をクラスにするCommandパターンを学ぶ

はじめに 今回は命令をクラスにするCommandパターンを紹介したいと思います。 クラス図 はじめに Commandパターンの定義 登場人物 Commnad Receiver ConcreteCommand Invoker Client さいごに Commandパターンの定義 Wikipediaにかなりわかりやすくまとめら…

【C#】責任をたらい回しするChain of Responsibilityパターンについて学ぶ

はじめに 今回は責任をたらい回しするChain of Responsibilityパターンを紹介したいと思います。 クラス図 はじめに 登場人物 Handlerのコード ConcreteHandler 動作確認 さいごに 登場人物 冒頭でも述べた通り,Chain of Responsibilityパターンは責任(要求…

【Unity】UniRxで使える自作Subjectを作ってみる

はじめに UniRxにはSubjectというクラスがあり,イベント駆動でコーディングするにはほぼ必須と言っても過言ではないのでしょうか。今回はそんなSubjectへの理解を深めるために,自作Subjectを作ってみたいと思います。 はじめに 自作Subject テスト 最後に …

【C#】nullチェックを不要にできるNull Objectパターンを学ぶ

はじめに 今回はNullReferenceExceptionのスローを防ぐためのnullチェックを減らすことができるNull Object パターンについて紹介したいと思います。 クラス図 はじめに よくあるnullチェック Null Objectパターン適応後 さいごに よくあるnullチェック clas…

【C#】データ構造と処理を分離するVisitorパターンを学ぶ

はじめに 今回はデータ構造と処理を分離する目的で用いられるデザインパターンVisitorパターンを紹介したいと思います。 クラス図 はじめに 登場人物 データ構造側 処理の記述側 データ構造側のコード 処理を記述するコード テスト データの集合を扱うクラス…

【C#】LINQで非同期処理をawaitをする

C#

はじめに 今回はLINQで非同期処理をawaitする方法について紹介したいと思います。 はじめに コード さいごに コード using System; using System.Linq; using System.Threading.Tasks; class Program { private static void Main(string[] args) { _ = Calcu…

【C#】ValueObject、そなたは美しい

はじめに 最近ValueObjectパターンなるものを知ったのですが、DDD(ドメイン駆動開発)で用いられる手法の一つのようです。今回はメリット等には触れず、ValueObjectの作り方だけに注目していきたいと思います。 はじめに 作り方 おまけでEntityについて さい…

【Unity】unity1week「あける」でクラス設計してみたの補足(特にMV(R)Pパターン)

はじめに 先日noteの方にこのような記事を書きました。note.com正直Unityちゃんデスクトップフィギュアが欲しい*1という不純な動機で書き始めましたが、想像以上に多くの方から反応をいただけて嬉しかったです。今回はこちらの記事で紹介仕切れなかったクラ…

【C#】その例外の再スローって必要なの?

C#

はじめに 今回はcatchの中でthrowだけ書かれている再スローについて取り上げていきたいと思います。結論から言うと再スローを書かなくても良いのですが、実験方法をつらつらと書いていきます。 はじめに 実験 手法1 手法2 結果 手法1 手法2 さいごに 実験 手…

【Unity】HttpClient.GetStringAsyncにCancellationTokenを引数で渡せないので対策を考える

はじめに タイトルの通りUnityでHttpClient.GetStringAsyncでCancellationTokenを引数で渡そうと思ったのですが、どうやらバージョンが違うせいでできないみたいでした。公式ドキュメントを見てみると.NET 5.0のみ対応らしいです。 public System.Threading.…

【C#】グラフの連結成分を調べるアルゴリズムを実装してみる

はじめに 今回はグラフの連結成分を調べるアルゴリズムを実装してみようと思います。そもそもグラフの連結成分とは「任意の2点間に道があるグラフのうち、極大な連結部分グラフ」のことをいいます。以下の画像のようなグラフだと{0, 1},{2, 3, 4},{5, 6, 7…

【C#】LINQの「ElementAt(0) vs First()」

C#

はじめに プルリクのレビューをしていたところ、Enumerable.ElementAt(0)を用いてコレクションの最初の要素を指定している方がいました。 https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.elementat?view=net-5.0私はいつもEnumerable.…

【Unity】HttpClient,UnityWebRequestにタイムアウトを設定する方法

はじめに Unityで通信を行おうと思った場合、HttpClientもしくはUnityWebRequestのどちらかを使うことが多いでしょう。これらを用いるに当たってタイムアウト処理を設定しておかないと、永遠に処理が終わらないなんてこともあるかもしれません。今回はそれを…

【C#】トポロジカルソートを実装してみる

はじめに 今回はトポロジカルソートを実装していきたいと思います。ja.wikipedia.orgトポロジカルソートとは有向非巡回グラフ(DAG)においてどのノードもその出力辺の先のノードより前にくるように並べるアルゴリズムのことです。 トポロジカルソート アルゴ…

【C#】配列から2つの要素を選び、指定した和になる組み合わせを列挙する

はじめに 今回扱ってみる問題はこんな感じ。 n個の配列Aと整数kが入力として与えられたとき,Aの2つの要素の和がkとなる組み合わせを列挙せよ 例. 入力:A = {1, 6, 4, 5, 3},k = 7 出力:(6, 1), (3, 4) 解き方 まずは2重ループを使った全探索の方法が思い…

【C#】2分探索木を実装してみる

はじめに 今回は2分探索木を実装してみようと思います。ja.wikipedia.org早速みていきましょう。 二分探索木 二分探索木は「左の子孫の値 ≤ 親の値 ≤ 右の子孫の値」という制約を持つ二分木のことを指します。 今回は以下の4つを実装します。 挿入 削除 要素…

【C#】選択ソートを実装してみる

はじめに 今回は選択ソートを実装していきたいと思います。 ja.wikipedia.orgこのアルゴリズムは実装は簡単だけど性能がいいといったソートアルゴリズムで、バブルソートと似た系統のものです。早速みていきましょう。 はじめに 選択ソート 実装 テスト 考察…

【C#】マージソートを実装してみる

はじめに 今回はマージソートを実装してみようという記事になります! ja.wikipedia.org前置きはなしに本題をみていきたいと思います。 はじめに マージソート 実装 使い方 考察 マージソート 英語ですが、この動画がすごく分かりやすく説明されていたのでオ…

【C#】シェルソートを実装してみる

はじめに 少し前に挿入ソートを実装してみました。 https://www.hanachiru-blog.com/entry/2020/07/30/180000www.hanachiru-blog.comこの挿入ソートをより高速化するために生まれたのが今回紹介するシェルソートになります。 ja.wikipedia.org早速みていきま…

【C#】ヒープソートを実装してみる

はじめに 今回はヒープソートを実装してみようという記事になります!ヒープソートというのは名前の通りヒープというデータ構造を用いたソートアルゴリズムであり,安定して高速に処理ができる(安定ソートという意味ではない)優秀なソートだと知られています…

【C#】基数ソートを実装してみる

はじめに 前回はバケットソートを紹介しましたが、今回はその改良版とも言われる基数ソートについて実装していきたいと思います。 ja.wikipedia.orgバケットソートではバケットの数が膨大になってしまうのはNGという制約がありました。計算量と引き換えにそ…

【C#】バケットソートを実装してみる

はじめに 前回は挿入ソートを紹介しましたが、今回はバケットソートを実装していきたいと思います。バケットソートはソートアルゴリズムでよくある要素を交換する手法を取らない面白いアルゴリズムです。 ja.wikipedia.orgまた以下の制約を満たさなければ動…

【C#】挿入ソートを実装してみる

はじめに 今回は挿入ソートを実装してみようという記事になります!挿入ソートはソートのアルゴリズムの一種で、性能はあまり良くないですが実装が簡単なアルゴリズムだと知られています。 ja.wikipedia.orgバブルソートと似た系統だと表現した方が分かりや…

【C#】Boyer-Moore法(BM法)を使って文字列の照合を行う

はじめに 今回はBoyer-Moore法(BM法)を自前で実装してみようという記事になります。BM法とは文字列検索アルゴリズムの一つで,他の文字列検索アルゴリズムと比べて優秀な部類と言われるアルゴリズムです。(最悪計算量は)C#をそれなりに触ったことのあるかた…

【C#】部分和問題(subset-sum problem)を解いてみる

はじめに 今回は部分和問題(subset-sum problem)を解いてみたいと思います。最初にネタバレをしてしまいますが、具体的にはbit全探索を用いた方法と動的計画法を用いた2種類を紹介していきます。アルゴリズムの教科書なんかでもよく出てくる問題なので、マス…

【Unity】xorを使った暗号化の基礎からPlayerPrefsの暗号化クラス作成まで

はじめに 今回はxor(排他的論理和)についてみていきます。xorを使った暗号化はかなり簡単な分類の暗号化アルゴリズムとして知られているので、すぐに習得できると思います。またその応用としてUnityのデータのセーブ・ロードのために用いられるPlayerPrefsを…

【C#】セグメント木を実装してみる

はじめに 今回はセグメント木を実装してみようという記事になります!セグメント木は主に区間上の値の更新と任意の区間内の最小値などの取得を高速化できます。構造としては完全二分木を用いていて、初期化に,更新・取得は共にで動作します。 en.wikipedia.…