从CSDN的趣味题学C# 3.0
2009-02-01 10:43 Jeffrey Zhao 阅读(13176) 评论(47) 编辑 收藏 举报引文参见:从CSDN的趣味题学Python
两道算法趣味题:
- 要求算一任意长度字符串中不同的字符以及它的个数。
- 把一段字符串用“右起竖排”的古文格式输出。
引文用了Python来解这种趣味题,很有意思,Python也很适合。不过我看了看似乎这篇文章没有真正理解如今的C#可以怎么用,老赵一时兴起,也来设法做了一下。
第1题
Python版:
dic = {} for s in "abcdefgabc": dic[s] = 1 if s not in dic else (dic[s]+1) print '\n'.join('%s,%s' % (k, v) for k, v in dic.items())
C# 3.0版
var values = "abcdefgabc" .GroupBy(c => c) .Select(g => String.Format("{0}, {1}", g.Key, g.Count())) .ToArray(); Array.ForEach(values, v => Console.WriteLine(v));
如果加上一个扩展——不写出来了,大家应该一看便知,老赵强烈推荐大家在项目中都要加上合适的扩展——再减少点行数:
"abcdefgabc" .GroupBy(c => c) .ForEach(v => Console.WriteLine(g.Key + ", " + g.Count()));
或者用上“狭义”LINQ?
string text = "abcdefgabc"; var result = from c in text group c by c into g select g; foreach g in result Console.WriteLine(g.Key + "," + g.Count());
第2题
Python版:
def main(offset=6): string = u'静夜思 李白床前明月光,疑似地上霜。举头望明月,低头思故乡。090131' a = [[' ']*offset for row in xrange(offset)] for i in xrange(offset): for j in xrange(offset): a[i][j] = string[j + i*offset] b = [[r[col] for r in a[::-1]] for col in xrange(len(a[0]))] print '\n'.join([u'┊'.join(unicode(c) for c in row)for row in b])
C# 3.0版:
static void Print(string text, int offset) { var matrix = text .Select((c, i) => new { Char = c, Index = i }) .GroupBy(c => c.Index % offset, c => c.Char.ToString()); Array.ForEach( matrix.ToArray(), a => Console.WriteLine(String.Join("|", a.Reverse().ToArray()))); }
C# 3.0扩展版:
static void Print(string text, int offset) { text .Select((c, i) => new { Char = c, Index = i }) .GroupBy(c => c.Index % offset, c => c) .ForEach(g => Console.WriteLine(g.Reverse().Join("|"))); }
调用一下:
Print("床前明月光疑似地上霜举头望明月低头思故乡", 5);
结果:
低|举|疑|床 头|头|似|前 思|望|地|明 故|明|上|月 乡|月|霜|光
最后声明一下,本文并非为了挑起语言之争。Python是一门强大灵活的语言,学习Python有百利而无一害。Python还有一个好处,那就是代码格式,至少缩进会非常的规范——没办法,在Python中缩进是语法的一部分,缩进不对直接导致代码运行不通过。代码格式一直不佳的朋友们可以尝试一下。
希望大家在掌握一门工具时把它用活,用好。C# 3.0中的高级特性更是大大提高开发效率的重要工具。其实这种“趣味编程”最关键的是“语言特性”,“语法”而不是其中包含的类库功能。其实Java也有内联写法,可以写的很短,说Java要20行以上——那只是不知道怎么“活用”Java而已。
最后,再附赠一个C#趣味编程。大家猜猜下面的代码输出什么?(暂时找不到了,一会儿补上)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2008-02-01 老赵被刷票了,但这不是老赵做的
2007-02-01 WPF/E 2007年2月CTP发布了