8/11/2007

OrderedCollectionのvalueからkeyを調べる

Squeakを使っていたら,OrderedCollectionのvalueからkeyを調べることがちょっと必要と思いました.

必要なんですか?とか言われそうですが,ちょっと欲しいと思ったので考えてみました.

y :=OrderedCollection new.
y add:#v;add:#a;yourself.

y keysAndValuesDo:[:key :value | (value = #v) ifTrue:[^key]].

結果
-->1

一応それっぽいですが,本当にいいのか心配.

Collectionのような入れ物からvalueが何番目に入っているのか調べたいだけなので,もっと他に言い方法がありそう・・・.



こんなのも考えてみましたが,こちらは無駄そう・・・.

y :=OrderedCollection new.
y add:#v;add:#a;yourself.

((y readStream) upTo:#v;yourself)position

つくづくプログラミング言語の活用方法について書いている方がすごく思えます.

追記:sumimさんよりもっと言い方法を教えていただきました.(コメント参照)

2 件のコメント:

sumim さんのコメント...

お邪魔します。こういう場合は、#indexOf: やそのバリエーション(#indexOf:startingAt:、#lastIndexOf:、…)、あるいは条件ブロックを引数にとる #find: や #findLast: が使えそうです。

Ringo さんのコメント...

>sumimさん

コメントありがとうございます.
sumimさんみたいな方にコメントがいただけるなんてちょっと感動です.

おっしゃる通り#indexOf:を使えばいいですね.
とても参考になりました.
もっといろいろClass探索をして勉強しないといけませんね.