Pracuję na małej metodzie SmallTalk, chcę tę metodę, aby iterować za pomocą tablicy słownika i zwrócić prawdziwe lub fałszywe zależne od warunków.

Tablica słownikowa jest zmienną instancją, Dictarray Nazwa.

Wygląda jak: [{'name': toto, 'age': 12}, {'name': tata, 'age': 25}]

Więc chcę iterować nad Dictarray i sprawdzić dla każdego elementu nazwisko i wiek. Jeśli pasuje do powrócenia prawdziwych fałszywych i końcówki iteracji.

W Pythonie powinien wyglądać:

for item in dictArray:
    if item['name'] == aName and item['age'] == aAge:
        return True
return False

Nie mogę znaleźć dokumentacji z tym specjalnym przypadkiem (array iteracja + warunek + powrót)

Mam nadzieję, że ktoś może mi pomóc!

2
Malkovitch John 14 styczeń 2020, 21:10

1 odpowiedź

Najlepsza odpowiedź

Aby przetestować, czy kolekcja zawiera element, który pasuje do warunku, użyj anySatisfy:. Odpowiada na prawdziwe IFF, jest pasujący element.

dictArray anySatisfy: [:each | (each at: 'name') = aName and: [(each at: 'age') = anAge]]

Odniesienie: https://www.gnu.org/software/ SmallTalk / Podstawa ręczna / HTML_NODE / Iterable_002DENUMENT.HTML

Sposób opisany powyżej jest preferowanym sposobem na zapisanie. Poniżej znajduje się tylko wyjaśnienie, w jaki sposób odnosi się do przykładu kodu Pythona.

anySatisfy: można wdrożyć pod względem do:

anySatisfy: aBlock
   self do: [:each | (aBlock value: each) ifTrue: [^ true]].
   ^ false

Lub napisane ze stanem:

dictArray do:
   [:each |
   ((each at: 'name') = aName and: [(each at: 'age') = anAge])
      ifTrue: [^ true]].
^ false

Jest to odpowiednik swojego kodu Pythona.

5
JayK 15 styczeń 2020, 09:04