ARRAYINDEXOF 函式

運算在陣列中第一個找到指定元素的索引,索引會按由左至右的順序排列。
  • 最左邊的索引值是 0
  • 如果找不到元素,則傳回 null。
  • 使用 ARRAYRIGHTINDEXOF 執行由右至左的搜尋。
    • 如果陣列中只存在一個元素,兩個函數都會傳回相同的值。
    • 詳情請參閱 ARRAYRIGHTINDEXOF 函式

基本用法

陣列常值參照範例:

derive type:single value:ARRAYINDEXOF(["A","B","C","D"],"C")

輸出:運算陣列中元素「C」的索引,即從 0 開始的索引中的 2

資料欄參照範例:

derive type:single value:ARRAYINDEXOF([myValues],myElement) as:myIndexOfmyValues'

輸出:產生新的 myIndexOfmyValues 資料欄,其中包含 myElement 資料欄中所列元素的 myValues 陣列中的索引。

語法

derive type:single value:ARRAYINDEXOF(array_ref,my_element)

引數是否必要?資料類型說明
array_ref陣列或字串陣列資料欄名稱、陣列常值或函式 (此函式會傳回要套用到函式的陣列)
my_element不限要在陣列中尋找的元素

如要進一步瞭解語法標準,請參閱語言文件語法附註

array_ref

陣列資料欄名稱、陣列常值,或會傳回您想要尋找的元素之陣列的函式。

  • 不支援多個資料欄和萬用字元。

使用須知:

是否必要?資料類型範例值
字串 (資料欄參照或函式) 或陣列常值myArray1

my_element

您要在陣列中尋找的元素常值。它可以是任何資料類型的值。

使用須知:

是否必要?資料類型範例值
不限"1st"

範例

範例 - 根據完成位置運算分數

本範例說明下列函式:

  • ARRAYINDEXOF - 傳回指定值的陣列索引值,從左向右搜尋。請參閱 ARRAYINDEXOF 函式一文。
  • ARRAYRIGHTINDEXOF - 傳回指定值的陣列索引值,從右向左搜尋。請參閱 ARRAYRIGHTINDEXOF 函式一文。

來源:

以下的陣列包含一系列按順序排列的比賽成績。目標是從這個清單中根據下列分數矩陣產生每位參賽者的得分。

名次分數
第 1 名30
第 2 名20
第 3 名10
最後一名-10
未完賽 (DNF)-20

結果:

RaceIdRaceResults
1["racer3","racer5","racer2","racer1","racer6"]
2["racer6","racer4","racer2","racer1","racer3","racer5"]
3["racer4","racer3","racer5","racer2","racer6","racer1"]
4["racer1","racer2","racer3","racer5"]
5["racer5","racer2","racer4","racer6","racer3"]


轉換:

請注意,每場比賽的參賽者人數會有不同,因此最後一名的名次取決於實際參賽的人數。參賽者人數可用以下方法擷取:

derive type: single value: ARRAYLEN(RaceResults) as: 'countRacers'

建立包含每位參賽者索引值的資料欄。以下是 racer1 的範例:

derive type: single value: ARRAYINDEXOF(RaceResults, 'racer1') as: 'arrL-IndexRacer1'

derive type: single value: ARRAYRIGHTINDEXOF(RaceResults, 'racer1') as: 'arrR-IndexRacer1'

然後您可以比較兩個資料欄中的值,判斷這兩欄的值是否相同。

注意:如果輸入值相同時,ARRAYINDEXOF 和 ARRAYRIGHTINDEXOF 未傳回相同的值,則表示該值在陣列中並不是唯一的。

由於頒給第 1、2、3 名的分數有一致的模式可循,因此您可以使用以下的單一陳述式,根據為左索引值儲存的值,來運算 racer1 站上頒獎台所拿到的分數:

case condition: ifThenElse if: {arrayL-IndexRacer1} < 3 then: (3 - {arrayL-IndexRacer1}) * 10 else: 0 as: 'ptsRacer1'

然後以下轉換會編輯 ptsRacer1,以評估未完賽 (DNF) 和最後一名的條件:

set col: ptsRacer1 value: IF(ISNULL({arrayL-IndexRacer1}), -20, ptsRacer1))

您可以使用下列陳述式來判斷指定參賽者是否為賽事的最後一名:

set col: ptsRacer1 value: IF(arrR-IndexRacer1 == countRacers, -10, ptsRacer1)


結果:

RaceIdRaceResultscountRacersarrR-IndexRacer1arrL-IndexRacer1ptsRacer1
1["racer3","racer5","racer2","racer1","racer6"]5330
2["racer6","racer4","racer2","racer1","racer3","racer5"]6330
3["racer4","racer3","racer5","racer2","racer6","racer1"]655-10
4["racer1","racer2","racer3","racer5"]40020
5["racer5","racer2","racer4","racer6","racer3"]5nullnull-20


本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Google Cloud Dataprep 說明文件
需要協助嗎?請前往我們的支援網頁