Как определяется сокращение (используя foreach)

Мне трудно понять, как использовать foreach. Я как бы "понимаю" текст, но пример, приведенный в руководстве, немного выше моего понимания. Не могли бы вы показать мне, как определить операцию reduce с помощью foreach?

почему отрицательное голосование? В самом руководстве говорится, что foreach является обобщенным сокращением. Поэтому я хотел бы знать, как написать сокращение, используя foreach, чтобы понять это. Должно быть легко! а мне совершенно непонятно.

Martin Mucha 21.12.2020 14:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
reduce SOURCE as $VAR (INIT; REDUCTION)

эквивалентно

[ foreach SOURCE as $VAR (INIT; REDUCTION; .) ] | last

Наоборот,

foreach SOURCE as $VAR (INIT; UPDATE; EXTRACT)

эквивалентно

reduce SOURCE as $VAR (
   { state: ( INIT ), rv: [] };
   .state |= ( UPDATE ) |
   .rv += [ .state | EXTRACT ]
) | .rv[]

Как видите, они очень похожи. На самом деле практически идентичны.

  • Используйте reduce, когда вам нужен один результат.
  • Используйте foreach, когда вы хотите получить результат для каждого ввода.

Например, скажем, у нас есть следующий ввод:

["abc", "def", "ghi", "jkl", "mno"]
foreach .[] as $var (false; not; .)

производит

true
false
true
false
true

так

foreach .[] as $var (false; not; if . then $var else empty end)

производит

"abc"
"ghi"
"mno"

Спасибо, очень полезно! Если вы можете (или кто-то другой), было бы здорово, если бы это можно было добавить в руководство, поскольку эти операции могут быть сложными для новичков в функциональном мире.

Martin Mucha 21.12.2020 17:18

Я не согласен. Это не способ объяснить их. Прежде всего, руководство не является учебным пособием, и руководство для reduce будет больше похоже на это (за исключением части, упоминающей foreach).

ikegami 21.12.2020 17:41

в любом случае ваше объяснение здесь помогло мне, в то время как единственный пример из руководства с «массивом массивов», используемым в качестве состояния для работы, был менее дружелюбным примером — для меня. Еще раз спасибо за помощь!

Martin Mucha 21.12.2020 17:51
foreach в некоторых отношениях лучше всего понимается процедурно, во-первых, потому что процедурное объяснение простое, а во-вторых, потому что оно точное — в чем можно убедиться, рассмотрев foreach выражения, включающие break утверждения.
peak 22.12.2020 05:53

Другие вопросы по теме