砂物語
2025/02/05

GitHub ActionsでFlutter Lintをreviewdogするやつ

日々失われていく語彙力をどうにかしないといけない

というわけで、GitHub Actions上でdart analyzeした結果をreviewdogでPRにレビューコメントを付与するワークフローを作りました。一応モノレポ構成になっています。
ある程度関連知識について理解がある方を対象として書いています。
想定外のハマり箇所があったので、うまく動かない場合の参考になれば幸いです。

flutter-reviewdog.png

続きを読む

2022/10/10

C# DataGridViewでLinqを使って列集計

DataGridViewの各列ごとに入力されているセルを数え、その最大値を返すコード。
処理したいDataGridViewをvar dgvとしておきます。

単純にforで書くとこう↓
var count = new int[dgv.ColumnCount]; // int[]型
for(int row = 0; row < dgv.RowCount; row++)
{
  for(int col=0; col < dgv.ColumnCount; col++)
  {
    count[col] += !string.IsNullOrEmpty(dgv[col, row].Value?.ToString()) ? 1 : 0;
  }
}
int maxCount = count.Max();

直感的ですね。
次にLinqで同じことをしてみました↓
int maxCount = dgv.Columns.Cast().Max(col => dgv.Rows.Cast().Count(row => !string.IsNullOrEmpty(row.Cells[col.Index].Value?.ToString())));

自分で書いておきながら(これは暗号だ……)と思い、こんなもん「よく分からないけど動く呪文か何か」にしかならないと思い使用をやめましたが、なんだか勿体なかったのでここに供養することにしました。
コレクション処理を何が何でもLinqで1行で書きたい人は一定数いらっしゃるようなので、そういった方々のお役に立てれば幸いです(?)

(読みにくいコードを書くのは極論あとから読まないアセンブリを書いているのと同義で何のための高級言語か分からなくなるので、ご利用は計画的に…)