首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分割字符串列表以匹配首字母和最后字母的最佳方法是什么?

分割字符串列表以匹配首字母和最后字母的最佳方法是什么?
EN

Stack Overflow用户
提问于 2014-03-28 18:59:36
回答 5查看 1.7K关注 0票数 0

我在C#中有一个很长的单词列表,我想在这个列表中找到所有的单词,这些单词具有相同的首字母和最后字母,长度在5到7个字符之间。例如,列表可能有:

浪费的东西被洗了,洗了就洗了,看着手表枯萎了,浪费了智慧的洗涤

它会回来的

长度: 5-7,第一个字母: w,最后一个字母: d,“浪费,清洗,观看”长度: 5-7,第一个字母: w,最后一个字母: s,“洗涤,手表,枯萎,废物”

然后,我可能会更改长度为3-4个字符的规范,这将返回

长度: 3-4,第一个字母: w,最后一个字母: s,"was,wits“

我发现这种分割方法非常快,使每个项目都是唯一的,使用了长度,并给出了一个很好的开始:Spliting string into words length-based lists c#

是否有一种方法来修改/使用它来考虑到第一个字母和最后一个字母?

编辑

我最初问的是“最快”的方法,因为我通常用很多字符串数组来解决类似的问题(这些字符串数组很慢,涉及大量代码)。LINQ和查找对我来说是新的,但是我可以看到,在我链接到的解决方案中使用的ILookup在简单性和速度上都是惊人的。我其实不需要最小的处理器时间。任何避免我为这些信息创建单独数组的方法都是非常棒的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-28 19:13:27

这一条线将给你在你的范围内第一个/最后一个字母相同的组。

代码语言:javascript
运行
复制
 int min = 5;
 int max = 7;
 var results = str.Split()
                     .Where(s => s.Length >= min && s.Length <= max)
                     .GroupBy(s => new { First = s.First(), Last = s.Last()});
票数 2
EN

Stack Overflow用户

发布于 2014-03-28 19:11:31

代码语言:javascript
运行
复制
var minLength = 5;
var maxLength = 7;
var firstPart = "w";
var lastPart = "d";

var words = new List<string> { "washed", "wash" }; // so on

var matches = words.Where(w => w.Length >= minLength && w.Length <= maxLength && 
                               w.StartsWith(firstPart) && w.EndsWith(lastPart))
                   .ToList();

在大多数情况下,这应该是足够快的,除非你正在处理成千上万的文字和担心的ms。然后我们可以再看一看。

票数 0
EN

Stack Overflow用户

发布于 2014-03-28 19:12:29

就在LINQPad中,我创建了以下内容:

代码语言:javascript
运行
复制
void Main()
{
var words = new []{"wasted", "was", "washed", "washing", "was", "washes", "watched", "watches", "wilts", "with", "wastes", "wits", "washings"};

var firstLetter = "w";
var lastLetter = "d";
var minimumLength = 5;
var maximumLength = 7;

var sortedWords = words.Where(w => w.StartsWith(firstLetter) && w.EndsWith(lastLetter) && w.Length >= minimumLength && w.Length <= maximumLength);
sortedWords.Dump();
}

如果速度不够快,我将创建一个查找表:

代码语言:javascript
运行
复制
Dictionary<char, Dictionary<char, List<string>> lookupTable;

并做:

代码语言:javascript
运行
复制
lookupTable[firstLetter][lastLetter].Where(<check length>)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22721050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档