Skip to content

Commit 1fa3892

Browse files
committed
Merge branch 'release/5.1.0'
2 parents 0297e67 + 382ca40 commit 1fa3892

File tree

2 files changed

+14
-18
lines changed

2 files changed

+14
-18
lines changed
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
2-
1+
<Project Sdk="Microsoft.NET.Sdk">
32
<PropertyGroup>
43
<TargetFrameworks>netstandard2.0</TargetFrameworks>
54
<PackageId>F23.StringSimilarity</PackageId>
6-
<PackageVersion>5.0.0</PackageVersion>
75
<PackageTags>string;similarity;distance;levenshtein;jaro-winkler;lcs;cosine</PackageTags>
86
<Title>StringSimilarity.NET</Title>
97
<Authors>James Blair, Paul Irwin</Authors>
@@ -18,18 +16,16 @@
1816
<PublishRepositoryUrl>true</PublishRepositoryUrl>
1917
<IncludeSymbols>true</IncludeSymbols>
2018
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
19+
<Version>5.1.0</Version>
2120
</PropertyGroup>
22-
2321
<ItemGroup>
2422
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
23+
<PackageReference Include="System.Memory" Version="4.5.4" />
2524
</ItemGroup>
26-
2725
<ItemGroup>
2826
<None Include="logo.png" Pack="true" PackagePath="\" />
2927
</ItemGroup>
30-
3128
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
3229
<DocumentationFile>bin\Release\netstandard2.0\F23.StringSimilarity.xml</DocumentationFile>
3330
</PropertyGroup>
34-
3531
</Project>

src/F23.StringSimilarity/RatcliffObershelp.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public double Similarity(string s1, string s2)
4545
return 1.0d;
4646
}
4747

48-
var matches = GetMatchList(s1, s2);
48+
var matches = GetMatchList(s1.AsSpan(), s2.AsSpan());
4949
int sumOfMatches = 0;
5050

5151
foreach (var match in matches)
@@ -68,40 +68,40 @@ public double Distance(string s1, string s2)
6868
return 1.0d - Similarity(s1, s2);
6969
}
7070

71-
private static IList<string> GetMatchList(string s1, string s2)
71+
private static IList<string> GetMatchList(ReadOnlySpan<char> s1, ReadOnlySpan<char> s2)
7272
{
7373
var list = new List<string>();
7474
var match = FrontMaxMatch(s1, s2);
7575

7676
if (match.Length > 0)
7777
{
78-
var frontSource = s1.Substring(0, s1.IndexOf(match, StringComparison.Ordinal));
79-
var frontTarget = s2.Substring(0, s2.IndexOf(match, StringComparison.Ordinal));
78+
var frontSource = s1.Slice(0, s1.IndexOf(match, StringComparison.Ordinal));
79+
var frontTarget = s2.Slice(0, s2.IndexOf(match, StringComparison.Ordinal));
8080
var frontQueue = GetMatchList(frontSource, frontTarget);
8181

82-
var endSource = s1.Substring(s1.IndexOf(match, StringComparison.Ordinal) + match.Length);
83-
var endTarget = s2.Substring(s2.IndexOf(match, StringComparison.Ordinal) + match.Length);
82+
var endSource = s1.Slice(s1.IndexOf(match, StringComparison.Ordinal) + match.Length);
83+
var endTarget = s2.Slice(s2.IndexOf(match, StringComparison.Ordinal) + match.Length);
8484
var endQueue = GetMatchList(endSource, endTarget);
8585

86-
list.Add(match);
86+
list.Add(match.ToString());
8787
list.AddRange(frontQueue);
8888
list.AddRange(endQueue);
8989
}
9090

9191
return list;
9292
}
9393

94-
private static string FrontMaxMatch(string s1, string s2)
94+
private static ReadOnlySpan<char> FrontMaxMatch(ReadOnlySpan<char> s1, ReadOnlySpan<char> s2)
9595
{
9696
int longest = 0;
97-
var longestSubstring = "";
97+
ReadOnlySpan<char> longestSubstring = ReadOnlySpan<char>.Empty;
9898

9999
for (int i = 0; i < s1.Length; ++i)
100100
{
101101
for (int j = i + 1; j <= s1.Length; ++j)
102102
{
103-
var substring = s1.Substring(i, j - i);
104-
if (s2.Contains(substring) && substring.Length > longest)
103+
var substring = s1.Slice(i, j - i);
104+
if (s2.Contains(substring, StringComparison.Ordinal) && substring.Length > longest)
105105
{
106106
longest = substring.Length;
107107
longestSubstring = substring;

0 commit comments

Comments
 (0)