diff --git a/BFR/Operations/Sort.cs b/BFR/Operations/Sort.cs index 4278fa7..5c1c997 100644 --- a/BFR/Operations/Sort.cs +++ b/BFR/Operations/Sort.cs @@ -46,16 +46,15 @@ namespace BFR.Operations files.ReplaceAll(new List(files.Reverse())); } - // Code taken and slightly modified from https://git.lastassault.de/speatzle/BulkFileRenamer + // Using code from stackoverflow + // https://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp public static int CompareNatural(string strA, string strB) => CompareNatural(strA, strB, CultureInfo.CurrentCulture, CompareOptions.IgnoreCase); public static int CompareNatural(string strA, string strB, CultureInfo culture, CompareOptions options) { var cmp = culture.CompareInfo; - var (iA, iB) = (0, 0); - var softResult = 0; - var softResultWeight = 0; + var (iA, iB, softResult, softResultWeight) = (0, 0, 0, 0); while (iA < strA.Length && iB < strB.Length) { var isDigitA = char.IsDigit(strA[iA]); @@ -64,8 +63,7 @@ namespace BFR.Operations return cmp.Compare(strA, iA, strB, iB, options); else if (!isDigitA && !isDigitB) { - var jA = iA + 1; - var jB = iB + 1; + var (jA, jB) = (iA + 1, iB + 1); while (jA < strA.Length && !char.IsDigit(strA[jA])) jA++; while (jB < strB.Length && !char.IsDigit(strB[jB])) jB++; var cmpResult = cmp.Compare(strA, iA, jA - iA, strB, iB, jB - iB, options); @@ -81,7 +79,8 @@ namespace BFR.Operations softResultWeight = 1; } } - (iA, jA) = (iB, jB); + iA = jA; + iB = jB; } else { @@ -90,7 +89,7 @@ namespace BFR.Operations var (jA, jB) = (iA, iB); while (jA < strA.Length && strA[jA] == zeroA) jA++; while (jB < strB.Length && strB[jB] == zeroB) jB++; - int resultIfSameLength = 0; + var resultIfSameLength = 0; do { isDigitA = jA < strA.Length && char.IsDigit(strA[jA]); @@ -106,8 +105,7 @@ namespace BFR.Operations jA++; jB++; } - } - while (isDigitA && isDigitB); + } while (isDigitA && isDigitB); if (isDigitA != isDigitB) return isDigitA ? 1 : -1; else if (resultIfSameLength != 0)