public static string StringsToKey(params string[] values)
{
return string.Join(char.MinValue.ToString(), values);
}
использование должно работать:
var s1 = StringsToKey("abc", "def", "1234");
var s2 = StringsToKey("ab", "cde", "f1234");
var comparisonResult = string.Compare(s1, s2, StringComparison.Ordinal);
EDIT:
var s1 = StringsToKey("a", "2");
var s2 = StringsToKey("a1");
var r = string.Compare(s1, s2, StringComparison.Ordinal);
возвращает отрицательное значение (-49
).
Редактировать II:
, как упоминал Джо в комментариях, это не будет работать, если строка содержит '\0'
(или '\t'
, если табуляция используется как разделитель). Так что нет такого разделителя, который бы работал во всех случаях. Итак, я переписал функцию, но теперь она имеет 2 параметра, но все еще использует для сравнения CompareTo
метод:
public static int CompareStringSequences(
IEnumerable<string> first,
IEnumerable<string> second)
{
var x = Enumerable.Zip(first, second, (s1, s2) => s1.CompareTo(s2))
.FirstOrDefault(i => i != 0);
return x == 0 ?
x1.Length - x2.Length :
x;
}