From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id c69cb406 for ; Thu, 29 Aug 2019 00:50:46 +0000 (UTC) Received: (qmail 3625 invoked by alias); 29 Aug 2019 00:50:34 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: List-Unsubscribe: X-Seq: 24190 Received: (qmail 5184 invoked by uid 1010); 29 Aug 2019 00:50:33 -0000 X-Qmail-Scanner-Diagnostics: from mail-vs1-f47.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.2/25552. spamassassin: 3.4.2. Clear:RC:0(209.85.217.47):SA:0(-2.0/5.0):. Processed in 3.073831 secs); 29 Aug 2019 00:50:33 -0000 X-Envelope-From: sgniazdowski@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.217.47 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=nkVKR10WHJ2ld8mcGAk9jaIHhw56Fs/cahsskKWG+w0=; b=XH2jPUkFiC8D0Gq+Z5L3wspn+Oc5a475iOUpgiEw6BbXFrhXpwCnkqsyyWoLOQNHEa nO9Ly/F48hXUF2RPSgdleZsVC9BlQ5eg74YUnktY9zzAREQS1P1AIcvIF7ETUxDYHJE9 PoPSN5mFAhptnhka9ICINxWCVpW6oGctK7JsVHWTOoEWqor0ugr2OiqOyqFHR4jUnLMk DXPewaHPM/H516aqgHtyQBA4/sbuOIrw63k+XcVo3PpohgyKPSbTtfdjNCiYSHchu1ep ZnQ/bvWXEidzZPDJhxR7N6kPIWemu24WFc7jJAkbH3k9DGXvmDfFfS+extyWcajCH87j +glQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=nkVKR10WHJ2ld8mcGAk9jaIHhw56Fs/cahsskKWG+w0=; b=s1me5fvqiEdXaEVxZqE+a04QwCspgucFXb5XtUqMCg3fzs5n8EcaTyysgBziNmYUPs 8mFUq9M6A3mQ2W79zbKn17HwJRnpXEh3cmJFT7MOZRiZ4G46KG1UeJ5vfPTRMGMwdRLi 7DgbsBeu1zfY6umF4t3ghf0pdvvEkatuNnJVnM6rsGtIDr17ExsLljB2dCY77XNZtNJg 7oqJ7ye19hcwx7MfJeUxM5fWaT+etSKAwKpwQLSJAIaDLYuzvWRvCfOFDnFkZC9/YvE2 HmPJ0n/n4E84D/2nd1ohAKUOCweI309lCY84mqeZK684gLJSzmh/Ry8/CNXWhhh5YzIc 8khw== X-Gm-Message-State: APjAAAWxYutwPhtwh/SHLBpVyW1bTYVMI7kdUVV1FGniGAMnDX2lFhKO hhb+PJUC3bSigV/X/lt3DM2OsbW+emHoXfzwN1Jja+8u X-Google-Smtp-Source: APXvYqyrynfEhJEzLRDdUMvY2IGwVxdzEWDLEv2Igz1UrDeqWNe+kzl1c77mGQBt+dtC3mGhb933x44NCbBBdL2Xi8s= X-Received: by 2002:a05:6102:10c2:: with SMTP id t2mr4316555vsr.198.1567039795897; Wed, 28 Aug 2019 17:49:55 -0700 (PDT) MIME-Version: 1.0 From: Sebastian Gniazdowski Date: Thu, 29 Aug 2019 02:49:10 +0200 Message-ID: Subject: A way to apply function to each element of an array To: Zsh Users Content-Type: text/plain; charset="UTF-8" Hello, I thought that I share a method of applying of function to each element of an array. I think that it's obvious for someone interested in // substitution and (#m) and (#b) flags, but not necessarily for others. Also, it would be much more beautiful if zsh would support mksh's substitution ${|func;} which is replaced by the value that func assigns to REPLY, assuming that func can take some arguments (i.e. the $MATCH in the use case): msfunc() { REPLY="${(Q)1} $RANDOM"; return 0; } functions -Ms msfunc 1 1 msfunc myarr=( value1 value2 abc1 abc2 ) myarr=( "${(@)${myarr[@]/(#m)*/$(( msfunc(${(q)MATCH}) ))$REPLY}/(#s)0/}" ) print -rl $myarr Output: value1 21720 value2 18920 abc1 3318 abc2 14483 The (#s) matches the start of the string and is just for to ensure correctness and not actually needed. It however might save some time when debugging code, when some 0s start to disappear from the strings because of an specific, not always matching pattern (with (#b) flag, for example). The 0 can be also changed to some random number in such case. -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin blog: http://zdharma.org