我尝试让文本中出现的第一个字符保持其原始顺序。我尝试使用 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/