如何根据字符在字符串中出现的频率对字符列表进行排序?
How do I sort a list of chars based on how often they appear in a string?
我有两个列表。一个包含字符,另一个包含它们在字符串中出现的次数。我通过在第一个列表中找到一个字符的索引并使用第二个列表中的索引来查找它在字符串中出现的频率来访问列表。
我坚持的部分是按顺序显示它们,最常出现的字符按降序排列在顶部。我已经在对计数列表进行排序并在字符列表上重复相同操作的意义上寻找解决方案,但无济于事。
这是我目前的情况:
List<int> counts = new List<int>();
List<char> chars = new List<char>();
char[] inputCharArr = input.ToCharArray();
foreach(char c in inputCharArr)
{
if (chars.Contains(c))
{
counts[chars.IndexOf(c)]++;
}
else
{
chars.Add(c);
counts.Add(0);
counts[chars.IndexOf(c)]++;
}
}
foreach(char c in chars)
{
Console.WriteLine(c + " = " + counts[chars.IndexOf(c)]);
}
而不是列表操作,您可以尝试使用 Linq 以便 查询 input
字符串:
using System.Linq;
...
var result = input
.GroupBy(c => c)
.Select(group => (letter : group.Key, count : group.Count()))
.OrderByDescending(pair => pair.count)
.ToArray(); // let's materialize the result
foreach (var p in result)
Console.WriteLine($"{p.letter} = {p.count}");
我有两个列表。一个包含字符,另一个包含它们在字符串中出现的次数。我通过在第一个列表中找到一个字符的索引并使用第二个列表中的索引来查找它在字符串中出现的频率来访问列表。
我坚持的部分是按顺序显示它们,最常出现的字符按降序排列在顶部。我已经在对计数列表进行排序并在字符列表上重复相同操作的意义上寻找解决方案,但无济于事。
这是我目前的情况:
List<int> counts = new List<int>();
List<char> chars = new List<char>();
char[] inputCharArr = input.ToCharArray();
foreach(char c in inputCharArr)
{
if (chars.Contains(c))
{
counts[chars.IndexOf(c)]++;
}
else
{
chars.Add(c);
counts.Add(0);
counts[chars.IndexOf(c)]++;
}
}
foreach(char c in chars)
{
Console.WriteLine(c + " = " + counts[chars.IndexOf(c)]);
}
而不是列表操作,您可以尝试使用 Linq 以便 查询 input
字符串:
using System.Linq;
...
var result = input
.GroupBy(c => c)
.Select(group => (letter : group.Key, count : group.Count()))
.OrderByDescending(pair => pair.count)
.ToArray(); // let's materialize the result
foreach (var p in result)
Console.WriteLine($"{p.letter} = {p.count}");