给一个字符串,该字符串由0-9组成,要求用一个函数返回字符串中出现最多次数的数字数组。

som@'' 2017-04-10 03:01:56
如题,我这有一个成品但是太复杂,
static void Main(string[] args)
{
string str = "13346741222"; //数学表达式
int i = str.Length;
int[] p = new int[i];
int a = 0;
foreach (char ch in str)
{
p[a] = Convert.ToInt32(ch.ToString());
a = a + 1;
}
var res = from n in p
group n by n into g
orderby g.Count() descending
select g;
// 分组中第一个组就是重复最多的
int ii = 0;
foreach (var item in res)
{
foreach (var kk in res)
{
if (item.Count() > kk.Count())
{
if (item.Count() > ii)
{
ii = item.Count();
}
}
}
if (ii == 0)
{
ii = item.Count();
}
}
string aa = "";
foreach (var item in res)
{
if (item.Count() == ii)
{
aa += item.Key;
}
}
//重复数据放入数组
int num = aa.Length;
int[] zuinum = new int[num];
int wei = 0;
foreach (char ch in aa)
{
zuinum[wei] = Convert.ToInt32(ch.ToString());
wei = wei + 1;
}
Console.Write(aa);

}
能给简化一下 并且 详细的讲解下吗,O(∩_∩)O谢谢!
...全文
1263 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
som@'' 2017-04-10
  • 打赏
  • 举报
回复
引用 7 楼 stherix 的回复:
            string str = "13346741222";     //数学表达式
            var groups = str.ToCharArray().GroupBy(x => x);
            var MaxCount = groups.Max(x => x.Count());
            Console.WriteLine(MaxCount );
            foreach (var c in  groups.Where(x => x.Count() == MaxCount))
            {
                Console.Write(c.Key);
            }
谢谢,明白了
som@'' 2017-04-10
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaop 的回复:

 string str = "1122333555";     //数学表达式


 var a = str.GroupBy(d => d).Select(d => new { d = d.Key, c = d.Count() }).OrderByDescending(d => d.c);


 a.Where(d => d.c == a.FirstOrDefault().c).ToList().ForEach(item =>
            {
                Console.WriteLine("数字" + item.d + "出现的次数最多,有" + item.c + "次");
            });
谢谢,但不是太懂,能详细的讲解下吗?初学者 望体谅O(∩_∩)O
stherix 2017-04-10
  • 打赏
  • 举报
回复
            string str = "13346741222";     //数学表达式
            var groups = str.ToCharArray().GroupBy(x => x);
            var MaxCount = groups.Max(x => x.Count());
            Console.WriteLine(MaxCount );
            foreach (var c in  groups.Where(x => x.Count() == MaxCount))
            {
                Console.Write(c.Key);
            }
som@'' 2017-04-10
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
1.不需要用int数组,直接string可以ToCharArray 2.linq后面那堆赋值不知道你要干嘛,最后只输出一个字符的话,直接取第一个集合元素就够了
当字符串里的数字 出现次数最多的有重复的怎么办呢?比如 string str="1122334554"
by_封爱 2017-04-10
  • 打赏
  • 举报
回复

 string str = "1122333555";     //数学表达式


 var a = str.GroupBy(d => d).Select(d => new { d = d.Key, c = d.Count() }).OrderByDescending(d => d.c);


 a.Where(d => d.c == a.FirstOrDefault().c).ToList().ForEach(item =>
            {
                Console.WriteLine("数字" + item.d + "出现的次数最多,有" + item.c + "次");
            });
som@'' 2017-04-10
  • 打赏
  • 举报
回复
引用 2 楼 diaodiaop 的回复:

string str = "13346741222";     //数学表达式
var a = str.GroupBy(d => d).Select(d => new { d = d.Key, c = d.Count() }).OrderByDescending(d => d.c).FirstOrDefault();
Console.WriteLine("数字" + a.d + "出现的次数最多,有" + a.c + "次");
当这个字符串里出现 string str = "1122334455"; 怎么让他显示 12345 呢?
xdashewan 2017-04-10
  • 打赏
  • 举报
回复
1.不需要用int数组,直接string可以ToCharArray 2.linq后面那堆赋值不知道你要干嘛,最后只输出一个字符的话,直接取第一个集合元素就够了
by_封爱 2017-04-10
  • 打赏
  • 举报
回复

string str = "13346741222";     //数学表达式
var a = str.GroupBy(d => d).Select(d => new { d = d.Key, c = d.Count() }).OrderByDescending(d => d.c).FirstOrDefault();
Console.WriteLine("数字" + a.d + "出现的次数最多,有" + a.c + "次");
by_封爱 2017-04-10
  • 打赏
  • 举报
回复
你这结果 不就是输出2吗?

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧