Maison >développement back-end >C++ >Comment puis-je trouver efficacement toutes les occurrences d'un modèle de tableau d'octets dans un autre en C# ?
Question :
Étant donné deux tableaux d'octets, l'un représentant le modèle et l'autre contenant les données à rechercher, déterminez où dans le tableau de données le modèle correspond.
Solution :
Le code fourni fournit une solution efficace et concise en utilisant la méthode d'extension Locate :
<code class="language-csharp">public static int[] Locate(this byte[] self, byte[] candidate) { if (IsEmptyLocate(self, candidate)) return Empty; var list = new List<int>(); for (int i = 0; i < self.Length; i++) { if (i + candidate.Length > self.Length) break; bool match = true; for (int j = 0; j < candidate.Length; j++) { if (self[i + j] != candidate[j]) { match = false; break; } } if (match) list.Add(i); } return list.ToArray(); } private static bool IsEmptyLocate(byte[] self, byte[] candidate) { return self == null || self.Length == 0 || candidate == null || candidate.Length == 0 || candidate.Length > self.Length; } private static readonly int[] Empty = new int[0];</code>
La méthode Locate parcourt le tableau de données et vérifie comment chaque position de départ possible correspond au modèle. S'il y a une correspondance, enregistrez la position dans la liste, sinon passez à la position suivante ;
Exemple :
<code class="language-csharp">// 示例字节数组 byte[] pattern = new byte[] { 12, 3, 5, 76, 8, 0, 6, 125 }; byte[] toBeSearched = new byte[] { 23, 36, 43, 76, 125, 56, 34, 234, 12, 3, 5, 76, 8, 0, 6, 125, 234, 56, 211, 122, 22, 4, 7, 89, 76, 64, 12, 3, 5, 76, 8, 0, 6, 125 }; // 定位并打印匹配位置 foreach (var position in toBeSearched.Locate(pattern)) Console.WriteLine(position);</code>
Ce code modifie légèrement le code d'origine pour le rendre plus facile à comprendre et ajoute la gestion des tableaux vides et des cas où la longueur du motif est supérieure à la longueur des données. IsEmptyLocate
Les fonctions améliorent la lisibilité et la maintenabilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!