1

リストのリストをマトリックス スタイルで格納するクラスがあり、[x,y] のようにインデックスを付けることができます。

今、私はこれらのセットを持っています:

test_dict = {1:"cow",2:"horse"}

randommap = mapArray(None, (20,20))

ランダム マップは 1 のリストで満たされているだけです。したがって、どのインデックスも 1 を返します。しかし、ここで迷ってしまいます。おそらく、辞書のしくみについての誤解が原因です。

test_dict[1]

それは明らかに「牛」を返し、

randommap[1,1] #or any two x,y values up to 20 for that matter

値は 1 です。

しかし、これはどうして私に重要なエラーを与えるのですか:

test_dict[randommap[1,1]]

単独で、そこにランダムマップをインデックス付けすると値1が得られるので、その1をtest_dictのインデックスとして指定して、「牛」を返すべきではありませんか?

更新: これらは、問題を引き起こしていると思われる 2 つの方法です。整数ではなく文字列を返しているようですが、2 つの違いをよく理解しているかどうかはわかりません。

def __str__(self):
    return str(self.mapdata)

def __repr__(self):
    return str(self.mapdata)

オーバーロードされた__getitem__メソッドは次のとおりです。

def __getitem__(self, (x,y)):
    #Just reverses it so it works intuitively and the array is 
    # indexed simply like map[x,y] instead of map[y][x]
    return mapArray(self.mapdata[y][x])

申し訳ありませんが、フォーマットが少し台無しになっているようです。

4

2 に答える 2

1

1(および整数)、 (文字列)、および呼び出されたときにメソッドが文字列を返す"1"カスタム クラスには違いがあります。それらはすべてコンソールのように出力されますが、dict ルックアップと同等ではありません。__repr__()"1"1

であることを確認する必要がありtype(randommap[1, 1])ますint

更新:__getitem__メソッドは整数を返さず、mapArrayクラスの新しいインスタンスを返します。値そのものだけを返すつもりでしたか? 例えば:

def __getitem__(self, (x,y)):
    #Just reverses it so it works intuitively and the array is 
    # indexed simply like map[x,y] instead of map[y][x]
    return self.mapdata[y][x]
于 2012-08-10T16:16:34.117 に答える
0

更新された質問を考えると__getitem__、新しい mapArray を返すようです。

あなたのオーバーロード__getitem__は次のようなものでなければならないと思います

def __getitem__(self, (x,y)):
    return self.mapdata[y][x] 

代わりに ([y][x] の順序が意図的であると仮定します)。

于 2012-08-10T16:57:15.413 に答える