1

すべてのオブジェクトが WDataObject 型である電気計算エンジンを使用して開発しています。

文字列値で正常に機能するグラフを作成するクラスがありますが、これらの WDataObjects のグラフを作成する必要があります。

WDataObject が他の WDataObject と等しいかどうかを確認するには、独自のメソッドを使用する必要があります。.isEqual(WDataObject obj)

したがって、次のような辞書を作成すると

Dictionary<WDataObject , LinkedList<WDataObject>> map = new Dictionary<WDataObject , LinkedList<WDataObject>>( );

通常、キーから値を取得することはできません。代わりに、反復子を作成して手動で同等性を確認する必要があります。

私はうまく動作するこの機能を持っています:

public void addOneWayRelation ( string node1 , string node2 ) {
            LinkedList<string> adjacent = new LinkedList<string>( );
            try {
                adjacent = map[node1];
            } catch ( System.Collections.Generic.KeyNotFoundException ) {
                map[node1] = adjacent;
            }
            adjacent.AddLast( node2 );
        }

そして、型を文字列から WDataObject に変更する必要があります。

私はすでにキー検索を持っています

private LinkedList<WDataObject> searchKey ( WDataObject k ) {
            List<WDataObject> Keys = new List<WDataObject>( map.Keys );
            List<LinkedList<WDataObject>> Values = new List<LinkedList<WDataObject>>( map.Values );

            for ( int i = 0 ; i < Keys.Count ; i++ ) {
                if ( Keys[i].IsEqual( k ) ) {
                    return Values[i];
                }
            }
            return null;
        }

問題は

map[node1] = adjacent;

このコンテキストで特定のキーの値を置き換えるにはどうすればよいですか?

どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたの指示のおかげで、このコードは問題を解決しました:

Dictionary<WDataObject , LinkedList<WDataObject>> map = new Dictionary<WDataObject , LinkedList<WDataObject>>( new EqualityComparer( ) );

辞書を使用する任意のコード

public class EqualityComparer : IEqualityComparer<WDataObject> {
        public int GetHashCode ( WDataObject obj ) { return obj.GetHashCode( ); }
        public bool Equals ( WDataObject obj1 , WDataObject obj2 ) { return obj1.IsEqual( obj2 ); }
    }
于 2013-09-20T13:03:14.153 に答える