/// <summary> /// Durchsucht die nach länge gruppierte Liste von Teilzeichenolgen nach Wiederholungen. /// </summary> /// <param name="substringsGroupedByLength">Die nach länge gruppierte Liste von Teilzeichenfolgen.</param> /// <param name="cores">Die Anzahl der zu benutzenden CPU-Kerne. 0 verwendet /// alle zur Verfügung stehenden.</param> /// <returns>Eine Liste aller Teilzeichenfolgen in <paramref name="substringsGroupedByLength"/>, /// wobei wiederholungen in einem Element zusammen gefasst wurden.</returns> public static IEnumerable <Occurence> FindRepetitions(IEnumerable <IEnumerable <Substring> > substringsGroupedByLength, int cores = 0) { var enu = substringsGroupedByLength.AsParallel(); if (cores > 0) { enu = enu.WithDegreeOfParallelism(cores); } foreach (var group in enu) { var items = group.ToArray(); for (var index1 = 0; index1 < items.Length; ++index1) { if (items[index1] == null) { continue; } var occ = new Occurence(items[index1].Text); occ.Indices.Add(items[index1].Index); for (var index2 = index1 + 1; index2 < items.Length; ++index2) { if (items[index2] == null || items[index1].Text != items[index2].Text) { continue; } occ.Indices.Add(items[index2].Index); items[index2] = null; } yield return(occ); } } }
/// <summary> /// Durchsucht die nach länge gruppierte Liste von Teilzeichenolgen nach Wiederholungen. /// </summary> /// <param name="substringsGroupedByLength">Die nach länge gruppierte Liste von Teilzeichenfolgen.</param> /// <param name="cores">Die Anzahl der zu benutzenden CPU-Kerne. 0 verwendet /// alle zur Verfügung stehenden.</param> /// <returns>Eine Liste aller Teilzeichenfolgen in <paramref name="substringsGroupedByLength"/>, /// wobei wiederholungen in einem Element zusammen gefasst wurden.</returns> public static IEnumerable<Occurence> FindRepetitions(IEnumerable<IEnumerable<Substring>> substringsGroupedByLength, int cores = 0) { var enu = substringsGroupedByLength.AsParallel(); if (cores > 0) { enu = enu.WithDegreeOfParallelism(cores); } foreach (var group in enu) { var items = group.ToArray(); for (var index1 = 0; index1 < items.Length; ++index1) { if (items[index1] == null) { continue; } var occ = new Occurence(items[index1].Text); occ.Indices.Add(items[index1].Index); for (var index2 = index1 + 1; index2 < items.Length; ++index2) { if (items[index2] == null || items[index1].Text != items[index2].Text) { continue; } occ.Indices.Add(items[index2].Index); items[index2] = null; } yield return occ; } } }