我需要一种方法将字符串集合转换为唯一字符串。这意味着如果集合中的任何字符串发生了变化,我需要有一个不同的字符串。
我正在研究一个很大的解决方案,所以我可能无法使用一些更好的想法。必需的唯一字符串将用于比较2个集合,因此不同的字符串表示不同的集合。我无法逐个比较字符串,因为顺序可能会改变,而且已经构建了基于2字符串比较返回结果的解决方案。这是一个附加组件。生成的字符串将作为此比较的参数传递。
谢谢!
答案 0 :(得分:1)
使用hash function怎么样?
答案 1 :(得分:1)
考虑到您的约束,请使用分隔方法:
选择分隔符和转义方法。
例如使用 ;并将其转义为字符串y \;,也可以通过\\
所以这个字符串列表......
"A;bc"
"D\ef;"
...变为"A\;bc;D\\ef\;"
它不漂亮,但考虑到它必须是一个字符串,那么csv及其兄弟的好方法并不是太糟糕。
答案 2 :(得分:1)
这两者都可以通过决定使用&#34;的分隔符来实现:&#34;并且当我们用分隔符来表示其他东西时,还使用转义字符来表明它。因此,我们只需要在将它们与它们之间的分隔符连接之前转义所有字符串。这为每个系列提供了独特的字符串。我们需要做的就是如果我们想要使集合相同,或者命令是在我们做任何事情之前对我们的集合进行排序。我应该添加我的示例使用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);
}
答案 3 :(得分:0)
“收集字符串”是指“字符串集合”吗?
这是一种天真(但有效)的方法:对集合进行排序(以消除对顺序的依赖),对它们进行连接,并对其进行哈希处理(例如MD5)。
琐碎的实施,但不是非常聪明的表现。
答案 4 :(得分:0)
您是说您需要将字符串集合编码为字符串。因此,例如,集合{“abc”,“def”}可以被编码为“sDFSDFSDFSD”,但是{“a”,“b”}可以被编码为“SDFeg”。如果是这样,你不关心唯一键,那么你可以使用像SHA或MD5这样的东西。