c# - 将内容数量有限的字符串数组内容从最后一个数组位置转移到新的字符串数组
问题描述
我有一个名为“string_array_packet”的字符串数组,其中包含
FA,6,52,4C,0,A4,FA,6,52,4C,0,A4,FA,6,52,4C,0,A4,FA,6,52,4C,0,A4,FA, 6,52,4C,0,A4,FA,6,52,4C,0,A4,FA,6,52,4C,0,A4,FA,6,
现在我需要检查从 Array(string_array_packet) 末尾到另一个字符串数组是否存在内容“FA,6,52,4C,0,A4”(这是正确的响应)。在上面的数组内容中,正确的响应从 string_array_packet[Length-8] 开始,考虑到 FA 是每个响应的起始字节。但是索引位置可能会有所不同,因为数组内容是动态生成的。我正在尝试以下方法,但我知道如果位置发生变化,它将不起作用。任何帮助将非常感激
string_array_packet[string_array_packet.Length - 8]);
解决方案
您可以执行以下操作。
var strArray = new string[]{"FA","6","52","4C","0","A4","FA","6","52","4C","0","A4","FA","6","52","4C","0","A4","FA","6","52","4C","0","A4","FA","6","52","4C","0","A4","FA","6","52","4C","0","A4","FA","6","52","4C","0","A4","FA","6"};
var searchArray = new string[]{"FA","6","52","4C","0","A4"};
var index = strArray.FindAllIndexOf("FA")
.Reverse()
.First(x=>strArray
.Skip(x)
.Take(searchArray.Count())
.SequenceEqual(searchArray));
var result = strArray.Skip(index).Take(searchArray.Count());
FindAllIndexOf 定义为
public static class Extension
{
public static int[] FindAllIndexOf<T>(this IEnumerable<T> values, T val)
{
return values.Select((b,i) => object.Equals(b, val) ? i : -1)
.Where(i => i != -1)
.ToArray();
}
}
这将使输出为
index : 36
result : FA,6,52,4C,0,A4
推荐阅读
- java - 有没有更优雅的方法来迭代对象方法并测试所有这些条件 Java
- php - 如何缓存多个 imdb 评分结果
- html - 如何使顶部的背景像底部的 SVG 一样?
- python - 使用 seaborn.pairplot() 以多种颜色绘制数据框?
- javascript - JS:如何编写一个接受另一个函数作为参数并返回一个函数的函数
- python - 在python中包含从单词到分号的正则表达式
- php - 按选择标签过滤的简单搜索
- python - 在 Python 中使用多处理时如何解决 BrokenPipeError
- geometry - 确定地图中草图叠加层下的点
- javascript - 父 DIV 的 CSS 干扰 SVG 动画