如何获得文本中第一个字符的出现并保持原始顺序?
我尝试让文本中出现的第一个字符保持其原始顺序。我尝试使用 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。这是我的代码:
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());
}
I try to get first character occurrence in text keeping their original order. I try to use LINQ but I'm very new in this, so something is wrong, and I have bad result.
For example I write: "languages", so the result would l-0, a-1, n-2, g-3, u-4, e-7, s-8 (digit mean index of occurrence). But my code gives: l-0, a-1, n-2, g-3, u-4, e-5, s-6.
So index number is 0,1,2,3,4,5 no matter what. That's my code:
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());
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用 LINQ 我相信您正在尝试完成以下任务:
您可以使用重载的
Select
方法来获取每个字符的索引。捕获原始索引后,您可以自由地进一步操作结果。现在,您可以仅过滤字符,按字符对它们进行分组,最后从每个组中获取First()
项。Using LINQ I believe you're trying to accomplish the following:
You can use the overloaded
Select
method to grab the index of each character. With the original indices captured, you're free to further manipulate the results. Now you can filter for characters only, group them by character and, finally, take theFirst()
item from each group.我会使用正则表达式:
以及非正则表达式替代方案:
I would use
Regex
:And a non-regex alternative:
你可以试试这个:
you can try this:
您想在这里使用 LINQ 有什么具体原因吗?
您没有保留 LINQ 查询中第一次出现的位置。您得到的只是所有字符的列表。
循环遍历字符串中的字符并使用
Dictionary
存储第一次出现的位置即可完成您的任务。Is there any specific reason you wanted to use LINQ here?
You are not preserving the position of the first occurence in the LINQ query. What you get is a simply a list of all characters.
Looping through the characters in a string and using a
Dictionary<char,int>
to store the position of the first occurrence would get your task done.