基于元素索引过滤数组的有效方法

时间:2019-09-17 03:00:42

标签: azure-logic-apps

我有一个数组数组。因此,我的第一个数组的每个元素都包含一个用逗号分隔的值列表。如果使用split函数,则可以从此逗号分隔列表中获取一个数组。我需要做的是根据元素位置过滤掉第二个数组。例如,仅保留第一,三,五和九列。

一种实现方法是循环遍历我的第一个数组,对每个元素在元素上进行拆分以获取我的第二个数组。然后循环通过第二个数组,增加一个计数器以跟踪当前元素索引。如果计数器等于我要保留的列之一,则将元素连接为字符串变量。

这是非常低效的,并且永远需要在大型阵列上运行。有人对更好的方法有任何想法吗?我希望我能清楚地解释一下。

2 个答案:

答案 0 :(得分:0)

有一些内置的数组动作,如您提到的“过滤器”和“连接”,但是对于这个特定的东西,我想您需要调用一些代码(例如,azure函数)来快速进行操作并返回结果< / p>

答案 1 :(得分:0)

对于第一个循环,我不知道任何替代方法,但是对于第二个循环,除了循环遍历第二个数组之外,您还可以直接访问具有所需索引的元素。

假定大小不是问题。

string[] Arr1 = new string[] { "0_zero,0_One,0_Two,0_Three,0_Four,0_Five,0_six,0_seven,0_eight,0_nine",
                "1_zero,1_One,1_Two,1_Three,1_Four,1_Five,1_six,1_seven,1_eight,1_nine" };
            string myString = string.Empty;
            foreach(var a in Arr1)
            {
                var sp = a.Split(',');
                myString= string.Concat(myString, sp[0], sp[3], sp[5], sp[9]);                   
            }
            Console.WriteLine(myString); //gives "0_One0_Three0_Five0_nine1_One1_Three1_Five1_nine"

在不确定每个字符串的长度的情况下,可以使用if梯形图,该梯形图要从我们要使用的最大索引开始按降序排列

foreach(var a in Arr1)
            {
                var sp = a.Split(',');
                int len = sp.Length;
                if (len >= 10)  myString= string.Concat(myString, sp[1], sp[3], sp[5], sp[9]);
                else if (len >= 6) myString = string.Concat(myString, sp[1], sp[3], sp[5]);
                else if (len >= 4) myString = string.Concat(myString, sp[1], sp[3]);
                else if (len >= 2) myString = string.Concat(myString, sp[1]);                        
            }

这样我们就不会遇到IndexOutofBoundsException

相关问题