【问题标题】:Transfer String Array Contents with limited number of contents to new String Array from last Array position将内容数量有限的字符串数组内容从最后一个数组位置转移到新的字符串数组
【发布时间】:2019-01-05 08:38:01
【问题描述】:

我有一个名为“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]);

【问题讨论】:

    标签: c# arrays string c#-4.0 c#-3.0


    【解决方案1】:

    您可以执行以下操作。

    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 
    

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      相关资源
      最近更新 更多