Programming」カテゴリーアーカイブ

プログラミング全般に関するカテゴリーです。

C#のtuple型

C#でもPythonなどと同じようにtuple型が使えます。

tuple型の使い方

( ),を使って(1, 2, "abc")のような感じで書くとtuple型になります。
各要素の参照はItem1Item2Item3になります。

サンプル

using System;

public class Example1
{
  static public void Main ()
  {
    var tuple = (1, 2, "abc");
    Console.WriteLine($"{tuple.Item1} {tuple.Item2} {tuple.Item3}");
  }
}

実行結果

1 2 abc

varの部分はValueTuple<int, int, string>と書くこともできます。

Listでtuple型を使いたい場合

Listと組み合わせて使いたい場合は

List<ValueTuple<int, int, string>>

もしくは

List<(int, int, string)>

のようにして使い▽ます。

サンプル

using System;
using System.Collections.Generic;

public class Example2
{
  static public void Main ()
  {
    var list = new List<(int, int, string)>();
    list.Add((1, 2, "abc"));
    list.Add((3, 4, "def"));

    foreach(var tuple in list)
    {
      Console.WriteLine($"{tuple.Item1} {tuple.Item2} {tuple.Item3}");
    }
  }
}

実行結果

1 2 abc
3 4 def

Tuple Class

ValueTupleの方が使い易いと思いますが、これとは別にTuple Classというものもあります。

使い方は次のような感じです。

サンプル

using System;

public class Example3
{
  static public void Main ()
  {
    var tuple = Tuple.Create(1, 2, "abc");
    Console.WriteLine($"{tuple.Item1} {tuple.Item2} {tuple.Item3}");
  }
}

実行結果

1 2 abc

ValueTupleとTuple Classの変換

ValueTupleをTuple Classに変換したい場合は.ToTuple()、Tuple ClassをValue Tupleに変換したい場合は.ToValueTuple()を使って相互に変換できます。

サンプル

using System;

public class Example4
{
  static public void Main ()
  {
    Tuple<int, int, string> tuple1 = (1, 2, "abc").ToTuple();
    ValueTuple<int, int, string> tuple2 = Tuple.Create(3, 4, "def").ToValueTuple();
    
    Console.WriteLine($"{tuple1.Item1} {tuple1.Item2} {tuple1.Item3}");
    Console.WriteLine($"{tuple2.Item1} {tuple2.Item2} {tuple2.Item3}");
  }
}

実行結果

1 2 abc
3 4 def

リンク

Tuple types – C# Guide | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/tuples

Tuple Class (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.tuple

TextMesh ProにSpriteを表示する方法

TextMesh ProはUI上にテキストを表示するAssetですが、タグを使って画像を表示することもできます。

手順としては次のような感じです。

1. 表示したい画像ファイルを読み込み、Sprite ModeをMultipleに設定します。

2. Spriteを右クリックしてCreate » TextMeshPro » Sprite Assetを実行します。

3. TextMesh ProのExtra Settingsを開いて2で作成したSprite Assetを設定します。

以上で準備完了です。

後は通常通りに使用しつつ、画像を表示したい場所に<sprite=N>のタグを追加してください。

Nの部分は0から始まるSpriteの番号です。番号を変更したい場合はSprite AssetのInspectorからSprite Character Tableを設定してください。

PythonでPDFを作成したい場合はReportLabが便利

PythonでPDFを作成したい場合はReportLabを使うのが便利です。

使い方は次のような感じです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
c = canvas.Canvas('reportlab-sample.pdf', pagesize=A4)

# 直線
from reportlab.lib.units import cm
p = c.beginPath()
p.moveTo(2*cm, 2*cm)
p.lineTo(5*cm, 2*cm)
c.drawPath(p)

# 四角形
c.rect(4*cm, 4*cm, 1*cm, 1*cm)

# テキスト
from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont
registerFont(TTFont('M+ 1p:style=light', 'mplus-1p-light.ttf'))
c.setFont('M+ 1p:style=light', 24)
c.drawString(2*cm, 8*cm, u'こんにちは世界!')

c.stringWidth(u'こんにちは世界!')

c.save()

出力されるPDFファイルのサンプルはこちらです。

ReportLabは純粋なPythonで書かれたオープンソースのライブラリになっていますので、Webサービスに組み込んで使うことも簡単です。

リンク

ReportLab Toolkit – ReportLab.com
https://www.reportlab.com/software/opensource/rl-toolkit/

M+ FONTS
https://mplusfonts.github.io/