コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】Dictionary から最大値や最小値を持つ要素を検索する方法

方法1 using System; using System.Collections.Generic; using System.Linq; public static class Program { private static void Main() { var table = new Dictionary<string, int> { { "フシギダネ", 1 }, { "フシギソウ", 2 }, { "フシギバナ", 3 }, }; // 最大値を</string,>…

【C#】Dictionary から指定したキーの要素を取得してから削除する拡張メソッド

ソースコード using System.Collections.Generic; public static class DictionaryExt { public static bool Remove<TKey, TValue> ( this Dictionary<TKey, TValue> self, TKey key, out TValue value ) { self.TryGetValue( key, out value ); return self.Remove( key ); } } 使用方法</tkey,></tkey,>…

【C#】Dictionary を結合する方法

目次 目次 foreach で結合する LINQ で結合する(キーが重複する場合は例外) LINQ で結合する(キーが重複しても大丈夫) 参考サイト様 foreach で結合する using System; using System.Collections.Generic; public static class Program { private static…

【C#】読み取り専用の Dictionary を使用する方法

ソースコード using System.Collections.Generic; using System.Collections.ObjectModel; public static class Program { private static void Main() { // 通常の Dictionary var table1 = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { </int,>…

【C#】Dictionary のキーに複数の値を設定する方法

構造体を使用する方法 using System; using System.Collections.Generic; public static class Program { // 構造体でキー用のデータを定義 public struct KeyData { public int m_series; public int m_number; public KeyData( int series, int number ) {…

【C#】Dictionary で値が重複している要素を取得する方法

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 100, "フシギダネ" }, { 101, "フシギダネ" }, { 102, "フシギダネ" }, { </int,>…

【C#】Dictionary を逆順に参照する方法

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "フシギバナ" }, }; // 逆</int,>…

【C#】Dictionary で値からキーを取得する方法

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "フシギバナ" }, }; // Fi</int,>…

【C#】登録順を取得できる Dictionary

ソースコード using System; using System.Collections; using System.Collections.Specialized; public static class Program { private static void Main() { // OrderedDictionary を使用すると登録順を取得できます var table = new OrderedDictionary {…

【C#】Dictionary をソートする方法

方法1 - SortedDictionary を使用する using System; using System.Collections.Generic; public static class Program { private static void Main() { var table = new SortedDictionary<int, string> { { 3, "フシギバナ" }, { 2, "フシギソウ" }, { 1, "フシギダネ" }</int,>…

【C#】Dictionary の最初の要素を取得する方法

方法 FirstOrDefault 関数を使用 using System; using System.Collections.Generic; using System.Linq; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "フシ</int,>…

【C#】Dictionary のキーで文字列の大文字と小文字を区別しない方法

ソースコード using System; using System.Collections.Generic; public static class Program { private static void Main() { // デフォルトでは大文字と小文字は区別される var table1 = new Dictionary<string, int>(); table1.Add( "sample", 1 ); table1.Add( "Samp</string,>…

【C#】Dictionary を foreach で参照する方法

ソースコード using System; using System.Collections.Generic; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "フシギバナ" }, }; // キーと値を同時に参照</int,>…

【C#】Dictionary から要素を削除する方法

ソースコード using System.Collections.Generic; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "フシギバナ" }, }; // 指定されたキーの要素を削除する tabl</int,>…

【C#】Dictionary を初期化する方法

メンバ変数の場合 using System.Collections.Generic; public class Program { // コレクション初期化子を使用する方法 その1 public Dictionary<int, string> m_table1 = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "フシギバナ" }, }; // コレク</int,></int,>…

【C#】Dictionary のキーや値を配列やリストに変換する方法

ソースコード using System.Collections.Generic; using System.Linq; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "フシギバナ" }, }; // キーの配列に変換</int,>…

【C#】Dictionary を foreach で使う時の記述を簡略化する Deconstruction

ソースコード using System.Collections.Generic; public static class KeyValuePairExt { public static void Deconstruct<TKey, TValue> ( this KeyValuePair<TKey, TValue> self, out TKey key, out TValue value ) { key = self.Key; value = self.Value; } } 使用例 通常 foreach ( </tkey,></tkey,>…

【C#】Dictionary に指定したキーや値が存在するかどうか確認する方法、値を取得する方法

ソースコード using System; using System.Collections.Generic; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1 , "フシギダネ" }, { 2 , "フシギソウ" }, { 3 , "フシギバナ" }, { 4 , "ヒトカゲ" }, { 5 </int,>…

【C#】Dictionary に指定したキーが存在する場合は代入する方法

ソースコード using System.Collections.Generic; public static class Program { private static void Main() { var table = new Dictionary<int, string> { { 1, "フシギダネ" }, { 2, "フシギソウ" }, { 3, "リザードン" }, }; // OK table[ 3 ] = "フシギバナ"; // NG</int,>…

【C#】1 つのキーに対して複数の値を登録できる Dictionary を実装する

ソースコード 使い方 var m = new MultiDictionary<string, string>(); m.Add( "ほのお", "ヒトカゲ" ); m.Add( "ほのお", "リザード" ); m.Add( "ほのお", "リザードン" ); m.Add( "でんき", "ピカチュウ", "ライチュウ" ); m.Remove( "でんき", "ライチュウ" ); m.Remove( </string,>…

【C#】Dictionary からランダムにキーや値を取得する拡張メソッド

ソースコード using System; using System.Collections.Generic; using System.Linq; public static class DictionaryExt { private static Random m_random; private static Random random => m_random ?? ( m_random = new Random() ); public static KeyV…

【C#】Dictionary から指定したキーの要素を削除する前に関数を呼び出す拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class DictionaryExtensions { /// <summary> /// 指定したキーを持つ値を削除します。 /// 削除前に指定された関数を呼び出します /// </summary> public static void Remove<TKey, TValue>( this Dictionary<TKey, TValue> se</tkey,></tkey,>…

【C#】Dictionary にキーが存在する場合にのみ関数を呼び出す拡張メソッド

ソースコード using System; using System.Collections.Generic; public static class DictionaryExtensions { /// <summary> /// 指定されたキーが格納されている場合は指定された関数を呼び出します /// </summary> public static void SafeCall<TKey, TValue>( this Dictionary<TKey, TValue> self, TKey </tkey,></tkey,>…

【Unity】Dictionary<TKey, TValue> を Hashtable に変換する拡張メソッド

ソースコード using System.Collections; using System.Collections.Generic; /// <summary> /// Dictionary 型の拡張メソッドを管理するクラス /// </summary> public static class DictionaryExtensions { /// <summary> /// 指定された Dictionary<TKey, TValue> を Hashtable に変換します /// </summary> /// <param name="self"></param>…

【Unity】Hashtable を Dictionary<string, string> に変換する拡張メソッド

ソースコード using System.Collections; using System.Collections.Generic; /// <summary> /// Hashtable 型の拡張メソッドを管理するクラス /// </summary> public static partial class HashtableExtensions { /// <summary> /// 指定された Hashtable を Dictionary<string, string> に変換します //</string,></summary>…

【C#】Dictionaryに既に指定したキーが存在する場合は何もしないAdd関数の拡張メソッド

ソースコード using System.Collections.Generic; /// <summary> /// Dictionary 型の拡張メソッドを管理するクラス /// </summary> public static class DictionaryExtensions { /// <summary> /// <para>指定したキーと値をディクショナリに追加します</para> /// <para>指定したキーが既に格納されている</para></summary>…

【C#】Dictionary型の指定したキーに値が存在しない場合はデフォルト値を返す拡張メソッド

ソースコード using System.Collections.Generic; /// <summary> /// Dictionary 型の拡張メソッドを管理するクラス /// </summary> public static class DictionaryExtensions { /// <summary> /// 指定したキーに関連付けられている値を取得します。 /// キーが存在しない場合は既定値</summary>…

【C#】Dictionary型の変数定義が横に長くなるのが気になる

例えばアイコンの種類によってテクスチャ名を取得するなど int型や列挙型をキーにして値を取得したい時は下記のようにDictionaryを使っていました // アイコンの種類 public enum IconType { SOLDIER, // 王国兵士 SORCERER, // 魔法使い } // アイコンごと…