Они оба работают, решив использовать символ разделителя «:», а также использовать escape-символ, чтобы было ясно, когда мы подразумеваем что-то другое под символом разделителя.Поэтому нам просто нужно экранировать все наши строки, прежде чем объединять их с нашим разделителем между ними.Это дает нам уникальные строки для каждой коллекции.Все, что нам нужно сделать, если мы хотим, чтобы коллекции были одинаковыми независимо или в порядке, - это отсортировать нашу коллекцию, прежде чем мы что-то сделаем.Я должен добавить, что мой образец использует LINQ и, следовательно, предполагает, что коллекция реализует IEnumerable<string>
, и что у вас есть объявление использования для System.LINQ
. Вы можете заключить это в функцию следующим образом
string GetUniqueString(IEnumerable<string> Collection, bool OrderMatters = true, string Escape = "/", string Separator = ":")
{
if(Escape == Separator)
throw new Exception("Escape character should never equal separator character because it fails in the case of empty strings");
if(!OrderMatters)
Collection = Collection.OrderBy(v=>v);//Sorting fixes ordering issues.
return Collection
.Select(v=>v.Replace(Escape, Escape + Escape).Replace(Separator,Escape + Separator))//Escape String
.Aggregate((a,b)=>a+Separator+b);
}