- 締切済み
C#のDictionaryについて
C#のDictionaryで、Keyの部分に配列のようなものを入れることは可能ですか? たとえば、(3.0, 4.0, 5.0)のような三つの値の組(順番も重要)をKeyに入れ、その値の組を指定することで、Valueの値を取得するということは可能でしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
キーとして 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は他のクラスで使う場合はそのクラスのインスタンスを使用します
- redfox63
- ベストアンサー率71% (1325/1856)
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 ); といった具合で取り出せばいいかと …
お礼
なるほど、継承を使えばいいわけですね! ここまでのことは自分では思い浮かばなかったと思います。 ありがとうございました!!