获取 U-SQL SqlArray 中元素的索引?

Get index of element in U-SQL SqlArray?

我希望能够获得某个元素出现在我的 SqlArray 中的第一个索引。如果 myArray 中的第一个元素是“word”,那么像 IndexOf(myArray, "word") 这样的东西会 return 0。

有办法吗?我已经多次搜索文档,我的理解是 SqlArray 可能(?)在引擎盖下实现 IEnumerable,尽管 IEnumerable 下也没有任何 IndexOf 函数。

以防万一,我初始化数组的方式是:

DECLARE CONST @namesStr = "a,b,c,d";
DECLARE CONST @names = new SqlArray<string>( @namesStr.Split(',') );

如果您想使用 Scala 和 Databricks 执行此操作,那么您可以只使用 indexOf,例如

val namesStr = "banana,apple,apricot"

// To array
val a = namesStr.split(",")

a.indexOf("apple")

我的结果:

如果您确实需要在 U-SQL 中执行此操作,那么可以在代码隐藏文件中使用 IndexOf 函数,例如:

using Microsoft.Analytics.Interfaces;
using Microsoft.Analytics.Types.Sql;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace USQLworking2
{
    public class myFunctions
    {
        public static int someFunction(SqlArray<string> someString, string searchString)
        {
            //!!TODO add error / exception handling

            String[] stringArray = someString.ToArray();

            return Array.IndexOf(stringArray, searchString);

        }
    }
}

和U-SQL:

DECLARE @outputFile string = @"\output\output.csv";

DECLARE CONST @namesStr = "banana,apple,apricot";
DECLARE CONST @names = new SqlArray<string>( @namesStr.Split(',') );

@output =
    SELECT
        USQLworking2.myFunctions.someFunction ( @names, "apricot" ) AS shouldBe1
    FROM ( VALUES ( 0 ) ) AS x(y);


OUTPUT @output
TO @outputFile
USING Outputters.Csv();