如何解决C# 遍历列表以查找字符数
我正在尝试遍历字符串以查找字符、ASCII 值和字符出现的次数。到目前为止,我已经使用 foreach 语句找到了每个唯一的字符和 ASCII 值,并查找该值是否已经在列表中,然后不要添加它,否则添加它。但是,我正在努力解决计数部分。我在想逻辑是“如果我已经在列表中,不要再计算我,但是,增加我的频率” 我尝试了一些不同的方法,例如尝试找到它找到的字符的索引并将其添加到该特定索引中,但我迷路了。
db.coll.aggregate(
[
{
$sort:{ country: -1,"quantity": -1 }
},{
"$group":
{
"_id":{ "country": "$country" },"data":{ "$first": "$$ROOT" }
}
}
])
}
解决方法
我不确定我是否理解您的问题,但您正在寻找的可能是 Dictionary
统计字符出现频率
Dictionary<int,int> frequency = new Dictionary<int,int>();
foreach (int j in String)
{
if (frequency.ContainsKey(j))
{
frequency[j] += 1;
}
else
{
frequency.Add(j,1);
}
}
将字符链接到它们的 ASCII 的方法
Dictionary<char,int> ASCIIofCharacters = new Dictionary<char,int>();
foreach (char i in String)
{
if (ASCIIofCharacters.ContainsKey(i))
{
}
else
{
ASCIIofCharacters.Add(i,(int)i);
}
}
,
一个简单的 LINQ 方法是:
string String = "hello my name is lauren";
var results =
String
.GroupBy(x => x)
.Select(x => new { character = x.Key,ascii = (int)x.Key,frequency = x.Count() })
.ToArray();
这给了我:
,如果我理解您的问题,您想将所提供字符串中的每个 char
映射到它在字符串中出现的次数,对吗?
如果是这样,有很多方法可以做到这一点,您还需要选择要存储结果的数据结构。
假设您想使用 linq 并将结果存储在 Dictionary<char,int>,
中,您可以执行以下操作:
static IDictionary<char,int> getAsciiAndFrequencies(string str) {
return (
from c in str
group c by Convert.ToChar(c)
).ToDictionary(c => c.Key,c => c.Count());
}
如果这样使用:
var f = getAsciiAndFrequencies("hello my name is lauren");
// result: { h: 1,e: 3,l: 3,o: 1,... }
,
您正在创建直方图。但是您不应该使用 List.Contains
,因为它会随着列表的增长而变得无效。你必须一个接一个地浏览列表。最好使用基于散列的 Dictionary
并直接转到项目。代码可能是这样的
string str = "hello my name is lauren";
var dict = new Dictionary<char,int>();
foreach (char c in str)
{
dict.TryGetValue(c,out int count);
dict[c] = ++count;
}
foreach (var pair in dict.OrderBy(r => r.Key))
{
Console.WriteLine(pair.Value + "x " + pair.Key + " (" + (int)pair.Key + ")");
}
给出
4x (32)
2x a (97)
3x e (101)
1x h (104)
1x i (105)
3x l (108)
2x m (109)
2x n (110)
1x o (111)
1x r (114)
1x s (115)
1x u (117)
1x y (121)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。