Перенос содержимого String Array с ограниченным количеством содержимого в новый String Array из последней позиции Array - PullRequest
0 голосов
/ 05 января 2019

У меня есть массив строк с именем "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

Теперь мне нужно проверить наличие содержимого "FA, 6,52,4C, 0, A4," (что является правильным ответом) от конца массива (string_array_packet) до другого массива строк. В приведенном выше массиве правильный ответ начинается с string_array_packet [Length-8], учитывая, что FA - начальный байт для каждого ответа. Но позиция индекса может варьироваться, поскольку содержимое массива генерируется динамически. Я пробую следующее, но я знаю, что это не сработает, если позиция изменится. Любая помощь будет высоко ценится

    string_array_packet[string_array_packet.Length - 8]);

1 Ответ

0 голосов
/ 05 января 2019

Вы можете сделать следующее.

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 
...