Pharo dictionary



我有一个问题,这是我在代码中调用一个方法时的结果。

t do:[:i |
dict := Dictionary newFrom:{t->items}.
].  

t是

OrderedCollection(#name #lastName #birthDate)

以及项目。items an OrderedCollection('cs0yh1n1b2bm0wps16uvy7tfi' 'cs0yh1k1t3bgdszfupe407qdg' 21 April 1975)

a Dictionary [1 item] (an OrderedCollection(#name #lastName #birthDate)->an OrderedCollection('cs0yh1n1b2bm0wps16uvy7tfi' 'cs0yh1k1t3bgdszfupe407qdg' 21 April 1975).

我想要一本性别词典

a Dictionary (#name->'cs0yh1n1b2bm0wps16uvy7tfi' #lastNamename->'cs0yh1k1t3bgdszfupe407qdg' #birthDay->21 April 1975)

请问我该怎么做?

每次循环都要创建一个新的Dictionary。您需要在循环之前创建一个新的(空的(Dictionary,并使用#'at:put:'添加每个元素。如果要将t中的索引1映射到items中的索引,则需要有一个计数器。也许1 to: t size do: [:i | ...]

你问了很多关于Smalltalk的问题,我们很高兴你能学习它。你有没有试过花几个小时学习一本书或参加一门课程?我推荐Pharo Mooc,一些Pharo的书,或者一些Smalltalk的书。

TL;DR 让我再次重申Pharo By Example(PBE(很长很详细,通过它你会学到很多东西。

也就是说,当你刚开始的时候,有时一个明确的答案更容易理解。因此,这里有一个更明确的解决方案来解决您的问题。但是,请注意,此代码有一个主要弱点,即keys阵列的大小必须等于或小于values阵列的大小。如果不是这样,坏事就会发生。

keys := #(#name #lastName #birthDate).
values := #('cs0yh1n1b2bm0wps16uvy7tfi' 'cs0yh1k1t3bgdszfupe407qdg' '21 April 1975').
myDict := Dictionary new.
1 to: ( keys size) do: [ :item | myDict at: ( keys at:item ) put: (values at:item )  ].

在本例中,您从#((构造中获得的ArrayOrderedCollection同样有效。如果OrderedCollection对您很重要,并且您需要一个使用该Object的解决方案,则可以将前两行替换为:

keys := OrderedCollection withAll: #(#name #lastName #birthDate).
values := OrderedCollection withAll: #('cs0yh1n1b2bm0wps16uvy7tfi' 'cs0yh1k1t3bgdszfupe407qdg' '21 April 1975').

您在代码中遗漏的关键信息是,您有两个可索引的集合,因此您必须通过对这两个集合进行索引来解决问题。

代码的另一个问题是每次迭代都要重写字典。

dict := Dictionary newFrom:{t->items}.

最后:有这个解决方案。

myData := Dictionary newFrom: {#name->'cs0yh1n1b2bm0wps16uvy7tfi'. #lastName->'cs0yh1k1t3bgdszfupe407qdg'. #birthDate->'21 April 1975'}

注意:在每个关联的末尾都有一个。它将关联分离,并使其成为三个元素的列表。

我唯一简化了这个问题的地方是,我接受了你1975年4月21日使用Date的尝试,并将其转换为字符串。只是因为在示例中不包含日期构造更简单。

相关内容

  • 没有找到相关文章

最新更新