c# - 如何在保持原始顺序的文本中出现第一个字符?

标签 c# string linq

我尝试让文本中出现的第一个字符保持其原始顺序。我尝试使用 LINQ,但我是这方面的新手,所以出了点问题,结果很糟糕。

例如我写:“languages”,所以结果将是 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。那是我的代码:

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());
}

最佳答案

使用 LINQ 我相信您正在尝试完成以下任务:

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() 项。

关于c# - 如何在保持原始顺序的文本中出现第一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5316965/

相关文章:

c# - 以编程方式使用 TabControl

c# - Winforms 添加和删除用户控件

c# - Excel进程没有关闭

string - 使用<ui :repeat><h:inputText> on a List<String> doesn't update model values

javascript - 如何在 javascript/jquery 中分割字符串并测试字符串的开头?

c# - 解析 HTML 文档 : Regular expression or LINQ?

c++ - 将 State 的输入转换为缩写

c# - 在 C# 的 Dynamic Linq 中使用 "Contains"关键字查询数据

c# - List<T> Any 还是 Count?

c# - 转换方法。 "The specified method on the type cannot be translated into a LINQ to Entities store expression"