2

マルチマッピングとしてハッシュ テーブルを使用しており、以前のバインディングを削除したいと考えています。Hashtbl.remove は、現在のバインドを削除するだけです。y から x へのバインディングを削除する remove hash xy のようなものを考えています。複数のバインド xy がある場合は、そのうちの 1 つを削除する必要があります。私はこれのための作業コードをいくつか持っていますが、複雑すぎて遅いです (for ループなどが含まれます)。

私はそれがこのように動作するようにしたい:

Hashtbl.find_all ハッシュ 1 ;; [1;2;3;3;4] を返します

ハッシュを削除 1 3 ;;

Hashtbl.find_all ハッシュ 1 ;; [1;2;3;4] を返します

4

1 に答える 1

2

Hashtblこれは実際にはどのように使用されるように設計されているわけではないので、特に便利ではないと思います. Hashtblキーの複数のバインドを削除または追加する機能はありません。そのため、一度に 1 つずつ追加および削除する必要があります。あなたの反復的な解決策は、おそらく期待できるほど良いものです。

複数のバインドを明示的に処理する、つまり、各キーを明示的な (複数の) 値のセットにバインドする方がよい場合があります。これにより、バインディングに変更を加えるときに線形よりも優れた動作が得られます。

于 2013-06-10T05:14:00.237 に答える