範例 - ARRAYINDEXOF 和 ARRAYRIGHTINDEXOF 函式

本範例說明下列函式:

  • 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 說明文件
需要協助嗎?請前往我們的支援網頁