第二回KPF参加しましたよ

KPFはブログに書くまでが勉強会ということでそれへの応答。


ちなみにKPFとは
Kumamoto Programming Freaks
です。


僕は自分の作りかけのアプリケーションを使って発表したんだけど、
反応があるってのは楽しいね。
そして新しい考え方のヒントをもらって、
それを実装するために僕の予定はどんどんずれ込んでいく、と。


それにしてもあの「fizzbuzz問題」での盛り上がりようは忘れられないw
普通はfizzbuzz問題を説明するのにまず5分。
それがどのように面白いかを説明するのに10分。
そして結局理解してもらえない確率8割強。


なのにfizzbuzz問題という一つのキーワードで話題が出てくる出てくる。
まさにKPFの底力を見たって感じですね。


やはりKPFは面白い。


最後に、発表中に書いたC#LINQを使って配列やListの要素をシャッフルするというものを
無名クラスの構文を忘れてしまって書ききれなかったのでちゃんとしたものを置いておきます。

Random rand = new Random();
var tmp = ary.Select((item) => new { Item = item, RandNum = rand.Next() }).ToList();
tmp.Sort((a, b) => a.RandNum - b.RandNum);
ary = tmp.Select((element) => element.Item).ToArray();

aryという変数は何かの型の配列です。これはListでもOK。
その場合は最後のToArray()がToList()になります。


なのですが、正直この書き方はスマートじゃない。
Sort()が値を返さない破壊的メソッドなために間にtmpが必要になります。


と、発表の場で言うと、すぐさま
 「OrderByは?」
というものが返ってきた。
SQLをしている人の場合SortよりもむしろOrderByのほうが自然に最初に浮かぶとのことでしたが、
僕はSQLを書いたことがないのでOrderByというのは盲点だった。
なのでOrderByを使ったものにすぐさま変更。

ary = ary.Select((item) => new { Item = item, RandNum = rand.Next() }).OrderBy(
   (element) =>element.RandNum).Select((element) => element.Item).ToArray();

はい。見事に一行でかけて超幸せ。


このコードについて詳しい説明はしません(主に面倒くさいから)
知りたい方はC#

  • LINQ
  • lambda式
  • 無名クラス
あたりを調べればわかるんじゃないかなーということで。
後はご自分でどうぞ、という超投げやりな形で終わります。


最後になりますがもう一度


やはりKPFは面白い


大事なことなので二回書きました。