首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在文本中获得第一个字符的出现,使其保持原有的顺序?

如何在文本中获得第一个字符的出现,使其保持原有的顺序?
EN

Stack Overflow用户
提问于 2011-03-15 19:33:13
回答 4查看 647关注 0票数 1

我试图得到第一个字符出现在文本中,保持他们原来的顺序。我试着使用LINQ,但我在这方面是很新的,所以有些地方不对劲,而且我的结果很糟糕。

例如,我写了:“语言”,所以结果是l-0,a-1,n-2,g-3,u-4,e-7,s-8 (数字平均发生指数)。但是我的代码给出了: l-0,a-1,n-2,g-3,u-4,e-5,s-6.

所以指数是0,1,2,3,4,5,无论如何。这是我的密码:

代码语言:javascript
复制
char[] result = text.ToLower()
    .Where(char.IsLetter)
    .GroupBy(x => x)
    .Select(g => g.Key).ToArray();

for (int i = 0; i < result.Length; i++)
{
    listView1.Items.Add(result[i].ToString());
    listView1.Items[i].SubItems.Add(i.ToString());
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-15 19:38:50

我会用Regex

代码语言:javascript
复制
using System.Text.RegularExpressions;

var q = from ch in text.Distinct()
        select Regex.Match(text, ch.ToString());
foreach (var item in q)
{
    Console.WriteLine("{0}-{1}", item.Value, item.Index);
}

还有一种非正则的选择:

代码语言:javascript
复制
var q = from ch in text.Distinct()
        select new { Value = ch, Index = text.IndexOf(ch) };
票数 2
EN

Stack Overflow用户

发布于 2011-03-15 19:40:50

使用LINQ,我相信您正在尝试完成以下工作:

代码语言:javascript
复制
string input = "languages";
var query = input.Select((c, i) => new { Char = c, Index = i })
                 .Where(o => Char.IsLetter(o.Char))
                 .GroupBy(o => o.Char)
                 .Select(g => g.First());

foreach (var item in query)
{
    Console.WriteLine("{0}: {1}", item.Char, item.Index);
}

可以使用重载的Select方法获取每个字符的索引。捕获原始索引后,您可以进一步操作结果。现在您可以只对字符进行筛选,按字符对它们进行分组,最后从每个组中获取First()项。

票数 3
EN

Stack Overflow用户

发布于 2011-03-15 19:41:49

你想在这里使用LINQ有什么具体原因吗?

您没有保留LINQ查询中第一次出现的位置。你得到的只是一个简单的所有字符的列表。

循环遍历字符串中的字符,并使用Dictionary<char,int>存储第一次出现的位置,就可以完成任务。

代码语言:javascript
复制
 public static Dictionary<char, int> FirstOccurence(string str)
    {
        char[] strArr = str.ToCharArray();
        Dictionary<char, int> firstOccur = new Dictionary<char, int>();
        for (int i = 0; i < strArr.Length; i++)
        {
            if (!firstOccur.ContainsKey(strArr[i]))
            {
                firstOccur[strArr[i]] = i;
            }
        }
        return firstOccur;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5316965

复制
相关文章

相似问题

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