LAMBDA 函式(三):MAP

閱讀時間約 8 分鐘

今天要接著聊聊 LAMBDA 的第二個輔助函式,MAP

英文中「map」這個詞除了有名詞「地圖」的意思之外,在電腦科學與數學領域裡面偶有動詞「映射」的意思。在正式介紹 MAP 函式之前,我想先用一張圖簡單介紹 Google 試算表 MAP 函式的「映射」是什麼意思。

想像你有個「1、2、3」的陣列,想讓陣列的每個值乘以自己(平方),讓它出現在另一個陣列上:

raw-image

這就是 MAP 的映射了。

Google 試算表的 MAP 函式會讀取某範圍,讓它裡面每個數值都以 LAMBDA 函式運算,回傳對應的新範圍。以上面的例子來說,左手邊的「1、2、3」經過了中間的 LAMBDA 運算(自己乘以自己),就映射出右手邊的「1、4、9」了。

我們常用 MAP 函式做這些事:

  • 資料清理:轉換大小寫、篩選資料、清除特定字詞
  • 資料分類:可搭配不同的條件分類資料(可突破 ArrayFormula 不能與 ANDOR 使用的限制)
  • 清單的文字處理:批次擷取或取代文字

我個人是把 MAP 當作一種 ArrayFormula 在特定狀況無法使用的替代方案(特別是 ANDOR)、或是在做資料清理時,遇到多張結構相似的試算表時候就會用 MAP,再搭配已命名函式,把打包好的函式套用在其他地方,直接把時間省起來,提早休息!

點這邊可以到練習用的試算表,歡迎複製一份,我們一起來練習。




MAP 語法

=MAP(範圍, LAMBDA)
  • 範圍:要套用 LAMBDA 函式的範圍。
  • LAMBDA:要 MAP 套用於範圍內每個值的自訂函式。

語法相當單純!如果你有多個範圍要操作,當然可以多寫幾個範圍,再用 LAMBDA 結束:

=MAP(範圍 1, 範圍 2, 範圍 3, ... LAMBDA)


拿上面的例子,假設在 A1A3 有「1、2、3」三個數字:

raw-image

我希望在 B1B3 可以映射出 A1A3 的平方。在 B1 寫:

=MAP(A1:A3, LAMBDA(val, val * val))
  • 要運算的範圍:A1:A3
  • LAMBDA:把 A1A3 的每個值叫做 val,然後讓它自己乘以自己(val * val)。
raw-image

來看看執行結果:

raw-image

可以看到 B 欄成功把 A 欄透過 LAMBDA 函式映射過去、得到想要的結果了!

那我們來實際操作看看!✨




計算服飾特價

先從簡單的例子開始好了。打開「計算服飾特價」工作表:

raw-image

我們試著用 MAP 函式來算每個品項打 8 折的特價吧!

先釐清一下需求:

  • 範圍:B2B11
  • LAMBDA:範圍的值乘以 0.8。我把範圍裡的值叫做 val,讓 LAMBDA 去計算它。

這樣拼湊起來,我們就會得到:

=MAP(B2:B11, LAMBDA(val, val * 0.8))


放在 C2 上面,看看執行效果怎麼樣:

raw-image

這樣就完成了!




VIP 會員分級

把範圍的資料按條件分類也是 MAP 的常用場景之一。接下來試試看第二個練習,「VIP 會員分級」:

raw-image

我想把每個會員依據 B 欄的消費金額簡單分類,讓他們有不同的會員等級。

分級規則是這樣的:

  • 消費金額超過 50000 元 → VVVIP
  • 消費金額超過 30000 元 → VVIP
  • 消費金額超過 10000 元 → VIP
  • 消費金額低於或含 10000 元 → 一般會員

好,來釐清一下需求:

  • 範圍:B2B13
  • LAMBDA:範圍的值用 IFS 來分類,讓值根據我們設定的條件顯示不同的結果。這邊一樣把範圍裡的值叫做 val,讓 LAMBDA 去計算它。

好,把這邊的需求拼起來,我們就會得到:

=MAP(B2:B13, LAMBDA(val, 
IFS(val > 50000, "VVVIP", val > 30000, "VVIP",
val > 10000, "VIP", val <= 10000, "一般會員")))

我們在 C2 輸入這串算式,就會得到:

raw-image


這樣就輕易完成囉!

如果你不熟悉 IFS 的用法,可以回來這邊複習一下:IFS,IF 只要加個 S...?如果你有更細緻的條件想要設定,當然可以再進一步搭配 ANDOR 函式。




匯率換算

最後來挑戰困難一點點的「匯率換算」!我們要試試看讓 MAP 讀取兩組範圍的值,個別讓 LAMBDA 處理。

raw-image

A 欄跟 B 欄有各有一組資料,分別是當地貨幣與幣別代號。我們想要把每一列的外幣轉成台幣,顯示在 C 欄,像是這樣:

  • 50 USD → ___ TWD
  • 500,000 JPY → ___ TWD
  • 500 EUR → ___ TWD

⋯⋯以此類推。

說到匯率換算,就可以用 GOOGLEFINANCE 函式來幫我們的忙。我們只要把外幣幣別代號跟新台幣的「TWD」代號串在一起,就算得出目前外幣轉新台幣的匯率。舉例:

  • USDTWD:美金轉新台幣
  • JPYTWD:日幣轉新台幣
  • EURTWD:歐元轉新台幣

比如說,下面的算式可以得到 100 塊美金(USD)可以換多少新台幣:

=100 * GOOGLEFINANCE("USDTWD")

(不確定 GOOGLEFINANCE 怎麼做的話,歡迎來這複習:日幣換了沒?GOOGLEFINANCE 總整理(一):匯率換算


一樣釐清一下需求有哪些:

  • 範圍:A2A6(當地貨幣)、B2B6(幣別代號)
  • LAMBDA:取 A 欄的值,之後取 B 欄位的幣別代號並讓它和 TWD 字串接在一起後交給 GOOGLEFINANCE,再讓 A 欄的值跟 GOOGLEFINANCE 的結果相乘。

看起來有點複雜,沒關係!我們一步步來。先從 MAP 這邊指定要運算的範圍:

=MAP(A2:A6, B2:B6, 

LAMBDA

=MAP(A2:A6, B2:B6,
LAMBDA(

接下來指定參數的名稱。我這邊用 local 表「當地貨幣」、code 表「貨幣代碼」,這邊要照順序寫讓 local 會和前面的 A 欄對應、code 與 B 欄對應:

=MAP(A2:A6, B2:B6,
LAMBDA(local, code,

再來要做匯率的轉換,就是 local 乘以 GOOGLEFINANCE 的結果:

=MAP(A2:A6, B2:B6,
LAMBDA(local, code, local * GOOGLEFINANCE(

最後,把剛剛指定的 code(貨幣代碼)和新台幣代號的 TWD 串起來,然後順便寫前面 LAMBDAMAP 的右括號:

=MAP(A2:A6, B2:B6,
LAMBDA(local, code, local * GOOGLEFINANCE(code & "TWD")))

這樣就完成了!


我們在 C2 執行看看,就會得到:

raw-image

搞定!




最後,我另外做了一份「VIP 會員分級 + AND / OR」的示範:

raw-image

你可以點 D2,這邊是我的算式:

=MAP(B2:B, C2:C, LAMBDA(amount, visits,
IFNA(IFS(AND(amount >= 80000, visits >= 8), "VVVIP",
AND(amount >= 80000, visits < 8), "VVIP",
AND(amount <= 80000, visits >= 8), "VIP"),
"一般會員")))

我試著用 MAP,讓它跟 ANDOR 搭配使用。這突破 ArrayFormulaANDOR 不能同時使用的限制,這麼一來也就不需要用巢狀 IF 囉。有興趣的話歡迎參考一下!




如果你喜歡這次的文章,歡迎你透過這些方法支持我:

  • 按下愛心、按下儲存
  • 留言告訴我你的想法
  • 加入喜特先生的官方沙龍,即時看到我發布的教學
  • 付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
  • 追蹤喜特先生的 Facebook
  • 這邊小額贊助我的創作!

想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!

我是喜特先生,Mr. Sheet,我們下個教學見!



11.2K會員
147內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
發表第一個留言支持創作者!
喜特先生官方沙龍 的其他內容
我們馬上來介紹 LAMBDA 函式的第一個輔助函式 MAKEARRAY!
Google 試算表在 2022 年隆重推出了 LAMBDA 函式跟它的輔助函式,讓使用者可以製作自己的函式,還可以在指定範圍內做複雜的運算。LAMBDA 的出現,讓我們在試算表的資料處理能力帶來了革命性的進步,可以更輕鬆地完成複雜的工作!一起來看看。
有招 LET,可以讓你的長算式更清晰好讀!
已命名範圍是 Google 試算表的功能,簡單來說可以把儲存格參照範圍改成自己想要的名字,可以讓算式更好讀、減少維護時間、減少錯誤機率、在算式和可以用這個名字引用這個範圍。來看看怎麼做!
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
我們馬上來介紹 LAMBDA 函式的第一個輔助函式 MAKEARRAY!
Google 試算表在 2022 年隆重推出了 LAMBDA 函式跟它的輔助函式,讓使用者可以製作自己的函式,還可以在指定範圍內做複雜的運算。LAMBDA 的出現,讓我們在試算表的資料處理能力帶來了革命性的進步,可以更輕鬆地完成複雜的工作!一起來看看。
有招 LET,可以讓你的長算式更清晰好讀!
已命名範圍是 Google 試算表的功能,簡單來說可以把儲存格參照範圍改成自己想要的名字,可以讓算式更好讀、減少維護時間、減少錯誤機率、在算式和可以用這個名字引用這個範圍。來看看怎麼做!
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
Thumbnail
Continue from here Prerequisites Create an IAM role with access to Bedrock Create an "IAM Role" that defines the permissions needed to call Bed
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
A lambda function is a small anonymous function and can only have one expression.
Thumbnail
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
最近公司寫的系統要上線 , EFS 的存取點套用開發時設定出問題 背景是這樣的 開發 : 存取點 path 設 /xxx , 使用者和群組 id 設 1000 , 目錄使用者和群組 id 也設 1000 , 權限開 0600 (owner 可讀可寫) 上線 : 設定如同開發 神奇的事情出現了 , 開
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
Thumbnail
Continue from here Prerequisites Create an IAM role with access to Bedrock Create an "IAM Role" that defines the permissions needed to call Bed
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
A lambda function is a small anonymous function and can only have one expression.
Thumbnail
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
最近公司寫的系統要上線 , EFS 的存取點套用開發時設定出問題 背景是這樣的 開發 : 存取點 path 設 /xxx , 使用者和群組 id 設 1000 , 目錄使用者和群組 id 也設 1000 , 權限開 0600 (owner 可讀可寫) 上線 : 設定如同開發 神奇的事情出現了 , 開