5
| dict |
dict := #{'foo'->'brown'. 'bar'->'yellow'.
          'qix'->'white'. 'baz'->'red'. 'flub'->'green'} asDictionary.
dict at: 'qix'

IPrintItの場合、「白」になります。「asDictionary」を削除しても、「白」のままです。辞書には何があり、連想のコレクションには何がありませんか?

4

2 に答える 2

8

式 like#{exp1 . sxp2 . exp3}固有であり、キーが文字列である特別な種類の辞書であるHashedCollectionを作成します (おそらく Javascript では、このようなものをよく使用します)。

他のスモールトークではそのような表現はありません。代わりに、次のような配列式が{exp1 . sxp2 . exp3}squeak#導入され、 (Squeak のフォーク) と Amberでも使用できます。配列式は配列を作成するため、メッセージには整数を使用する必要があります。たとえば、作成した配列の 2 番目の位置にあるため、関連付けが返されます。#at:dict at: 2'bar'->'yellow'

#asDictionaryコレクションの要素が関連付けである場合に、それを辞書に変換するコレクションのメソッドです。したがって、文字列以外のキーを持つ辞書を作成する場合は、次のようにできます。

dict := {
    'foo' -> 'brown'  .
        1 -> 'yellow' .
    3 @ 4 -> 'white'  .
   #(1 2) -> 'red' } asDictionary
于 2015-06-05T14:23:02.933 に答える
3

ADictionary s のコレクションですAssociation。実際、これは Smalltalk の標準的なアソシエーションのコレクションです。(関連クラスのインスタンスはキーと値のペアであり、値は任意のクラスのオブジェクトにすることができます)。

ディクショナリが提供する利点は、使用したくなる他のコレクションと比較して、アソシエーションを処理するための特殊なメソッドがあることです。

ADictionaryは以下を提供します:
removeKey: aKey .aKeyを削除
includesKey: aKey .します キーの存在を
includes: aValue .チェックします
at:put: .

anAssociation := Association key:value:   .
aDictionary add:    

例えば

anAssociation := Association key:   'Hello' 
                             value: 'A greeting people often use' .
aDictionary add: anAssociation .

キーがディクショナリに既に存在する場合は、at:put既存の値が新しい値で上書きされるため、新しい項目を追加するときにキーに一意の値があることを確認することが重要です。

キーと値の両方を、任意のクラスのオブジェクト インスタンスにすることができます。ディクショナリ内のすべての関連付けは、任意の種類のオブジェクトにすることができ、すべてのキーと値は、ディクショナリ内の他のすべての要素とは異なるクラスのオブジェクトのインスタンスである可能性があります。

関連付けを作成するには、

anAssociation := Association key: 'keyOfElement' value: 'valueOfElement'  

または、より簡潔に言うと、

anAssociation := 'keyOfElement' -> 'valueOfElement'  

Symbol完全にs で特別に作成されたキーを使用する場合は、Class IdentityDictionary

于 2015-11-07T02:20:40.090 に答える