#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 っぽい使い方もできるようになってきたと感じます。