【发布时间】:2016-05-28 12:01:41
【问题描述】:
如果我们运行以下(感谢@octavioccl 的帮助)LINQ 查询:
var result = stringsList
.GroupBy(s => s)
.Where(g => g.Count() > 1)
.OrderByDescending(g => g.Count())
.Select(g => g.Key);
它为我们提供了列表中至少出现两次的所有字符串(但完全匹配,即汉明距离 =0)。
我只是想知道是否有一个优雅的解决方案(到目前为止我尝试过的所有解决方案都使用循环和丑陋的计数器或正则表达式)是否可以在Where 子句中指定汉明距离来获取那些位于指定汉明距离范围内的字符串?
P.S:所有字符串长度相等
更新
非常感谢 krontogiannis 的详细回答。正如我之前提到的,我想获得汉明距离低于给定阈值的字符串列表。他的代码运行良好(再次感谢)。
剩下的就是将字符串从“结果集”中取出并插入/添加到“列表”中
基本上这就是我想要的:
List<string> outputList = new List<string>();
foreach (string str in patternsList)
{
var rs = wordsList
.GroupBy(w => hamming(w, str))
.Where(h => h.Key <= hammingThreshold)
.OrderByDescending(h => h.Key)
.Select(h => h.Count());
outputList.Add(rs); //I know it won't work but just to show what is needed
}
谢谢
【问题讨论】:
-
汉明距离适用于等长的字符串。所有字符串的长度都相等吗?
-
如果你有字符串A、B和C,并且A距离B 1,B距离C 1,但是A距离C超过1,你想如何对这些进行分组? IE。如果它们是数字,并且您想将最大为 1 的所有数字分组,并且您有数字 1、2 和 3,那么您想从中创建哪些组?
-
@LasseV.Karlsen 好点 Lasse。 Kronto 在他的回答中处理得很好
标签: c# linq string-matching hamming-distance