#49: 2022-01-15 やったこと
- 数学のクイズについてのツイートを見かけました。
GAKKOU の 6 文字を並べ替えてできる 360 個の文字列を辞書式に並べるとき、100 番目の文字列を求めよ。
- 答えはすでに見てしまったのですが、この問題を解くには F# でどう書いたらいいのだろうか、と興味が湧いたのでやってみます。
まず文字列を 1 文字ずつのリストに変換します。
let splitString str = let rec split (s:string) lst = if s.Length > 0 then split s.[1..] (s.[0] :: lst) else List.rev lst split str []
こういう感じでしょうか。
もしかしたら、もっとスマートに書けるのかもしれません。
#48: GAS で列名で index を取得する
- Google Spreadsheet & GAS でテーブル形式のデータを扱う際に列を指定する場面が出てきます。
- 単純なものであれば
const fooColIndex = 3;
と変数名に受けて書いていましたが、途中で列を追加したりするとメンテナンス&デバッグに時間がかかる場合がありました。 - 今後は以下のように列名で引いてくるようにしようと思います。
// 1 行目は列名 const columnLabels = sourceSheet.getDataRange().getValues()[0]; /** * 指定した列名の array index を取得する。 * シートのデータを getValues() で 2 次元配列として処理する場合に使用する。 * @param {Array} labels * @param {String} label * @returns {Number} */ function getColIndex(labels, label) { const i = labels.indexOf(label); if (i < 0) { Browser.msgBox(`label: "${label}" が見つかりません。シートの列名が変更されていないか確認して下さい。`); } else { return i; } }
#47: 2022-01-13 やったこと
var resultLines = sourceLines.Select(async x => { var mailAddress = x.Split('\t')[1]; var checkResult = await CheckMailAddressAsync(mailAddress); return string.Join('\t', x, checkResult); }).ToArray();
これで resultLines
の型は Task<string>[]
になって、使うときにどうしたらいいのか悩みました。
ひとまず以下のようにして Task.WhenAll
で全ての処理が完了するのを待って、await
でそれを待つ(?)という形で書けば大丈夫でした。
await Task.WhenAll(resultLines))
#46: 2022-01-12 やったこと
-
- neuecc さんの記事を参考に AngleSharp を使います。
- neue cc - .NET 6とAngleSharpによるC#でのスクレイピング技法
Watch ウインドウ、Rider にもあるので使ってみました。
- たしかに REPL ですね、これは。便利便利。
C# もトップレベルステートメント(top-level statements)が書けるようになったので、LL っぽい使い方もできるようになってきたと感じます。