從CSDN的趣味題學C# 3.0

來源:互聯網
上載者:User

轉自老趙部落格:http://www.cnblogs.com/JeffreyZhao/archive/2009/02/01/1381867.html

引文參見:從CSDN的趣味題學Python

兩道演算法趣味題:

  1. 要求算一任意長度字串中不同的字元以及它的個數。
  2. 把一段字串用“右起豎排”的古文格式輸出。

引文用了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而已。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.