CSharp · Console
using System;
using System.Collections.Generic;
using Platform.Collections.Segments;
using Platform.Collections.Segments.Walkers;
var text = "aaaaaaaaaa";
var walker = new Walker4();
walker.WalkAll(text);
foreach (var l in walker.PublicDictionary)
{
foreach (var r in walker.PublicDictionary)
{
// ignore if guaranteed not equal
if (l.Key.Length != r.Key.Length) continue;
/// Lool use Func<...>
{
var key = l.Key;
var offset = key.Offset;
var length = key.Length;
Console.Write($"{key}[{offset}..{length + offset}] == ");
}
{
var key = r.Key;
var offset = key.Offset;
var length = key.Length;
Console.Write($"{key}[{offset}..{length + offset}]");
}
Console.WriteLine($"==> {l.Key.Equals(r.Key)}");
}
}
public class Walker4 : DictionaryBasedDuplicateSegmentsWalkerBase<char, CharSegment>
{
public IDictionary<CharSegment, long> PublicDictionary
{
get
{
return Dictionary;
}
}
public Walker4()
: base(DefaultMinimumStringSegmentLength, resetDictionaryOnEachWalk: true)
{
}
private int _totalDuplicates;
public override void WalkAll(IList<char> elements)
{
_totalDuplicates = 0;
base.WalkAll(elements);
Console.WriteLine($"Unique string segments: {Dictionary.Count}. Total duplicates: {_totalDuplicates}.");
}
protected override CharSegment CreateSegment(IList<char> elements, int offset, int length) => new CharSegment(elements, offset, length);
protected override void OnDublicateFound(CharSegment segment)
{
_totalDuplicates++;
}
}