azure-logic-apps - 基于元素索引过滤数组的有效方法
问题描述
我有一个数组数组。所以我的第一个数组的每个元素都包含一个逗号分隔的值列表。如果我使用 split 函数,我可以从这个逗号分隔列表中获取一个数组。我需要做的是根据元素位置过滤掉第二个数组。例如,只保留第一、三、五和九列。
一种方法是遍历我的第一个数组,为每个元素对元素进行拆分以获取我的第二个数组。然后遍历第二个数组,增加一个计数器来跟踪当前元素的索引。如果计数器等于我要保留的列之一,则将该元素连接到字符串变量。
这是非常低效的,并且需要永远在大型阵列上运行。有没有人有更好的方法来做到这一点?我希望我清楚地解释了这一点。
解决方案
对于第一个循环,我不知道任何替代循环,但对于第二个循环,您可以简单地访问具有所需索引的元素,而不是遍历第二个数组。
假设大小不是问题。
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 else 阶梯,从我们想要使用的最大索引开始按降序排列
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
推荐阅读
- ruby-on-rails - DoubleRenderError 但只有一次渲染
- python-2.7 - 跟踪瓶子请求中创建的greenlets
- node.js - 不能参考另一条记录插入记录
- json - 将选择性属性从 JSON 导入 sql server 表的最佳方法是什么
- amazon-lex - Amazon Lex - 接受用户输入并存储它
- java - 有序流的状态映射操作是否以确定的方式处理元素?
- javascript - 如何使用 AJAX 更新 HTML 页面上文件的显示内容?
- vue.js - 如何将背景颜色应用于 buefy 表?
- c# - .NET MAC 算法和实现 ISO 9797 MAC 算法 1
- angular - 刷新具有 Angular 2 路由的现有 url 时 Nginx 404 错误