10月 142017
 

タイトルの通り、キャメルケースの分割(split)をします。実装はC#。

正規表現で頑張る方法もあるようですが、ちょっとややこしいのとパフォーマンス的に嬉しくないことは容易に想像できるので、愚直な方法で実装します。

厳密なキャメルケースであれば、IDのような単語は、idやIdとなると思いますが、そのままIDと書くこともあるため、そのパターンにも対応します。スネークケースとの混用も対応します。先頭と末尾のアンダースコアは無視します。

例えば、_abcFOOBar123_456hoge__HOGE_ならばabcFOOBar123456hogeHOGEに分割します。

Continue reading »

10月 132017
 

(2017/11/20 「参照としてのスライス」節を追加、Span構造体について言及)

スライス(slice)とは、列(sequence)から部分列(subsequence)を取り出す操作のことを呼ぶもの、とここでは定義しておきます。

スライスは色んな言語に実装されている機能で、特に文字列(string)から部分文字列(substring)を得る機能を実装している言語は多いでしょう。文字列に限定しないときスライスという言葉が用いられている気がします。どこ由来なのか知らないため定義もわかりません。

C#にもそれっぽい機能はありますが、ちょっと使いにくいので、Pythonのスライスに近い機能を実装してみます。

Continue reading »

10月 082017
 

(2018/03/11 ルールにroot追加)

前回、プレイリストファイル(m3u/m3u8)を自動生成するPythonスクリプトを書いたんですが、やっぱりもう少し機能が欲しかったので拡張しました。

そこそこ複雑になってきたので、使う人が他にいるのかは知らぬ。

Continue reading »

10月 032017
 

(2017/10/08 機能拡張版を書きました)

Pythonスクリプトによってプレイリストファイル(m3u/m3u8)を自動生成する話です。自分がすぐに使えるよう、Pythonと正規表現でサクッと作りましたが、そういった技術的要素が理解できないと利用は厳しいことは先に言っておきます。

Continue reading »

9月 052017
 

出現確率が一様な抽選は、インデックスを一様乱数で求めればいいので実装が簡単です。

public static T sample<T>(T[] values)
{
    return values[UnityEngine.Random.Range(0, values.Length)];
}
public static T sample<T>(List<T> values)
{
    return values[UnityEngine.Random.Range(0, values.Count)];
}

ちなみに、この抽選は引いたくじを除外せずに次回も有効となる独立試行です。このような抽選を復元抽出と呼ぶそうです。

各要素の出現確率(重み)を設定して復元抽出したいとき、上の手法ではうまくいかないので、ひと工夫する必要があります。例えば、レア度によって出現確率の異なるガチャを実装したいといったケースですね。

以下、Unity向けに実装しますが、乱数取得部分を変えればUnity以外でも使えます。

Continue reading »

9月 042017
 

C#のstring.Format()は便利ですが使いにくいです。大まかな理由は下記にまとまると思います。

  1. インスタンスメソッドでない
  2. インデックスを正確に割り振る必要がある
  3. 書式が覚えられない

1.と2.に対して、C# 6.0でひとつの解決法は示されました。

ただ、私はPython使いでもあるので、Pythonぐらい文字列操作が柔軟であると嬉しいなと思ってしまうわけです。

詳しいことは順に説明することとして、名前をキーにしたDictionaryに対応したFormat()を実装するというゴールを目指します。

Continue reading »

Top