• 締切済み

C#のDictionaryについて

C#のDictionaryで、Keyの部分に配列のようなものを入れることは可能ですか? たとえば、(3.0, 4.0, 5.0)のような三つの値の組(順番も重要)をKeyに入れ、その値の組を指定することで、Valueの値を取得するということは可能でしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

キーとして double[] といった配列を使うのであれば このディクショナリを処理するクラスにIEqualityComparerインターフェイスを継承しましょう クラス定義に public class Test : IEqualityComparer<double[]> といった宣言をします メンバー関数として bool IEqualityComparer<double[]>.Equals( double[] s, double[] d ) {   if ( s.Length != d.Length )   {     return false;   }   for( int n = 0; n < s.Length; n++ )   {     if ( s[n] != d[n] )       return false;   }   return true; } の実装と int IEqualityComparer<double[]>.GetHashCode(double[] s) {   int sum = 0;   foreach (int n in s)   {     sum += n.GetHashCode();   }   return sum; } 実装します ディクショナリ構築を Dictionaly<double[],string>myDict =   new Dictionaly<double[],string>( this ); といった具合にします ・・・   thisは他のクラスで使う場合はそのクラスのインスタンスを使用します

hokty66
質問者

お礼

なるほど、継承を使えばいいわけですね! ここまでのことは自分では思い浮かばなかったと思います。 ありがとうございました!!

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Dictionary<string,string>myDict = new Dictionary<string,string>(); といった具合に構築して string ss = string.Format( "{0:0.0},{1:0.0},{2:0.0}",   arKey[0],arKey[1],arKey[2] ); myDict.Add( ss, sItem ); といった具合で登録します string sValue; string ss = string.Format( "{0:0.0},{1:0.0},{2:0.0}",   arKey[0],arKey[1],arKey[2] ); myDict.TryGetValue( ss, out sValue ); といった具合で取り出せばいいかと …

関連するQ&A