ディクショナリ系のイテレートプロトコルのお勉強(Association)が理解できていない。。。

昨日のつづき。

実はいろいろ調べたけど、この辺よくわかってなかったり。。。
自由自在SqueakのP199〜P201参照。というかまんま。。。

まとめるというか、サンプルコードを記載のみ。
例によっていつものDBからデータを持ってきた後のデータで。。。

data := result rows collect:[:each | each dataKeyedByFieldName].
  • KeysDo: (Keyを取り出してイテレート)
(data at: 1) keys do: [:each | Transcript cr; show: each].
"↑が"
(data at: 1) keysDo: [:each | Transcript cr; show: each].
"こう書ける。"
  • ValuesDo: (値を取り出してイテレート)
(data at: 1) values do: [:each | Transcript cr; show: each].
"↑が"
(data at: 1) valuesDo: [:each | Transcript cr; show: each].
"こう書ける。"
  • KeysAndValuesDo: (Keyと値の両方でイテレート)
(data at: 1) keysAndValuesDo: [:key :value | Transcript cr; show: key. Transcript space; show: value].
  • associationDo: (キーと値のペアーのイテレート)

Associationとはキーと値のペアのこと。(これがわかっていない。Dictionaryとの使い分けってどうするんだろう?)
イテレートブロック内の中で要素をAssociationとして参照できる。(???)

keyでキーが、valueでで値が取り出せる。

(1 -> 'one'

)でAssociationが作れる。(->メッセージで作成)

(data at: 1) associations do: [:association | Transcript cr; show: association key].
(data at: 1) associations do: [:association | Transcript cr; show: association value].

"↑が"
(data at: 1) associationsDo: [:association | Transcript cr; show: association key].
(data at: 1) associationsDo: [:association | Transcript cr; show: association value].
"こう書ける。"

何がわからないかというと、文だけでみると、スペース入れてdo:しているのと違いが大文字になってスペースがなくなっただけ。
ということ。読みやすさが大事ということなのかな?使い分けというか、慣例がよくわからなかったです。。。はい。。。

あと、今データベースからかえってきた値はOrderedCollection(順序付き集合)の中にDictionary(連想配列)が入っているので、
クエリのORDER BY 等の条件は保持されると思ってるというか、保持されてるんですが、データの持ち方おかしいんでしょうか?

Associatonって何?使うといいことあるの??? (? ?)って状態です。。。