UWPでハンバーガーメニュー

UWPでハンバーガーメニューを実装するには、ToggleButtonのIsCheckedプロパティに、SplitViewのIsPaneOpenプロパティをバインドします。

ハンバーガーメニューのボタンは、
FontFamilyを「{StaticResource SymbolThemeFontFamily}」
Contentを「」
にします。

<StackPanel Orientation="Horizontal">
    <ToggleButton
        Width="48"
        Height="40"
        Content="&#xE700;"
        FontFamily="{StaticResource SymbolThemeFontFamily}"
        IsChecked="{Binding IsPaneOpen, ElementName=SplitView, Mode=TwoWay}" />
    <TextBlock Text="ハンバーガーメニューのサンプル" />
</StackPanel>
<SplitView x:Name="SplitView" Grid.Row="1">
    <SplitView.Pane>
        <ListView>
            <ListViewItem Content="メニュー1" />
            <ListViewItem Content="メニュー2" />
            <ListViewItem Content="メニュー3" />
        </ListView>
    </SplitView.Pane>
</SplitView>

macOSをバージョンアップしたらgitが使えなくなったときの対策

MacのOSをmacOS Mojaveにアップデートしたら、gitを使おうとするとエラーメッセージを表示するようになった。

$ git --version
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

このようなエラーメッセージが表示されたら、「code-select –install」を実行して、インストールすると良いらしい。

$ xcode-select --install
xcode-select: note: install requested for command line developer tools

インストールが完了したら、使えるようになった。

$ git --version
git version 2.17.1 (Apple Git-112)

C#で標準入力を使ったよくある処理のまとめ

C#で標準入力を使ったよくある処理をまとめました。

入力文字列を1行読み取る

入力された文字列を1行読み取り、そのまま出力します。

入力例

test1

出力例

test1

ソースコード

public static void Main(string[] args)
{
    var line = System.Console.ReadLine();
    System.Console.WriteLine(line);
}

入力文字列の1行目の数値を読み取る

1行目の文字列を取得して、数値に変換します。

入力例

2

出力例

2

解説

文字列を整数に変換するときは、Int32.Parse()を使用します。

小数に変換するときは、float.Parse()を使用します。

整数に変換できるか確認するときは、Int32.TryParse()を使用します。

ソースコード

整数に変換するとき

var line = System.Console.ReadLine();
var n = System.Int32.Parse(line);
System.Console.WriteLine(n);

小数に変換するとき

var line = System.Console.ReadLine();
var n = float.Parse(line);
System.Console.WriteLine(n);

整数に変換できるか確認するとき

var line = System.Console.ReadLine();
int n;
if (System.Int32.TryParse(line, out n))
    System.Console.WriteLine(n);
else
    System.Console.WriteLine($"入力値「{line}」は整数ではありません。");

区切り文字で分割して配列にする

文字列を区切り文字で分割した配列にします。

入力例

A B C

出力例

l   {string[3]}   string[]
    [0]    "A"    string
    [1]    "B"    string
    [2]    "C"    string

解説

String.Split()は区切り文字を引数に取り、文字列の配列を返します。

String[] 配列 = String.Split(区切り文字);

ソースコード

var line = System.Console.ReadLine();
var l = line.Split(' ');

区切り文字で分割して浮動小数点数にする

空白で区切られた複数の浮動小数点数の文字列を、浮動小数点数の配列にします。

入力例

1.23 4.56 7.89

出力例

l   {float[3]}     float[]
    [0]    1.23    float
    [1]    4.56    float
    [2]    7.89    float

解説

文字列を区切り文字で分割し、浮動小数点数に変換します。

ソースコード

using System.Linq;

var line = System.Console.ReadLine();
var l = line.Split(' ').Select(s => float.Parse(s)).ToArray();

N行読み込む

1行目は行数、2行目に以降は値があるときに、値の配列を取得します。

形式

N
a1
a2
a3
...
aN

入力例

5
1
2
3
4
5

出力例

l   {int[5]}    int[]
    [0]    1    int
    [1]    2    int
    [2]    3    int
    [3]    4    int
    [4]    5    int

解説

1行目を読み取って行数を取得し、行の数だけ繰り返し値を読み込みます。

ソースコード

    var n = System.Int32.Parse(System.Console.ReadLine());
    var l = new int[n];
    for (int i = 0; i < n; i++)
    {
        l[i] = System.Int32.Parse(System.Console.ReadLine());
    }

1行目の行数と列数

1行目の行数と列数があり、2行目以降に整数がある形式です。

各行の値を整数の配列にして、リストに登録します。

形式

N M
a11 a12 a13 ... a1M
a21 a22 a23 ... a2M
a31 a32 a33 ... a3M
...
aN1 aN2 aN3 ... aNM

入力

5 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20

出力

l   Count = 5    System.Collections.Generic.List<int[]>
-   [0]    {int[4]}    int[]
        [0]    1    int
        [1]    2    int
        [2]    3    int
        [3]    4    int
-   [1]    {int[4]}    int[]
        [0]    5    int
        [1]    6    int
        [2]    7    int
        [3]    8    int
-   [2]    {int[4]}    int[]
        [0]    9    int
        [1]    10    int
        [2]    11    int
        [3]    12    int
-   [3]    {int[4]}    int[]
        [0]    13    int
        [1]    14    int
        [2]    15    int
        [3]    16    int
-   [4]    {int[4]}    int[]
        [0]    17    int
        [1]    18    int
        [2]    19    int
        [3]    20    int

解説

各行の文字列をString.Split()で分割した後、Enumerable.Take()で必要な数だけ取り出ます。
その後、整数に変換して、リストに登録します。

ソースコード

var x = System.Console.ReadLine().Split(' ').Select(i => System.Int32.Parse(i)).ToArray();
var n = x[0];
var m = x[1];
var l = new System.Collections.Generic.List<int[]>(n);
for (int i = 0; i < n; i++)
{
    var values = System.Console.ReadLine().Split(' ').Take(m);
    l.Add(values.Select(v => System.Int32.Parse(v)).ToArray());
}

Rubyのrequireやloadが相対パスで指定されたときにファイルを検索する時の場所

requireやloadが相対パスで指定されたときにファイルを検索する時の場所についてまとめました。

組み込み変数$LOAD_PATH

requireやloadが相対パスで指定されたファイルは、組み込み変数$LOAD_PATHに格納されたパス順にファイルを検索します。

$LOAD_PATHの値を確認する

コマンドラインから$LOAD_PATHの値を確認するには、次のコマンドを実行します。

$ ruby -e 'puts $LOAD_PATH'

または

# ruby -e 'puts $:'

読み込み場所を拡張する

コマンドラインオプション -I

コマンドラインオプション -I で指定したパスは、最優先で検索されます。

$ruby -I $HOME/mylib -e 'puts $:'

環境変数RUBYLIB

環境変数RUBYLIBの値は、$LOAD_PATHのデフォルト値の前に追加されます。

$ RUBYLIB=$HOME/mylib
$ export RUBYLIB
$ ruby -e 'puts $:'