LoginSignup
2
1

More than 5 years have passed since last update.

[D言語]UFCSを自分なりにメモ

Last updated at Posted at 2015-12-10

はじめに

D言語のUFCSについて気になったことを適当に書いていきます。メモ書きなので、てきと~ですが気が向いたときに適宜更新。(完全に他サイトの引用集です 笑)

UFCSについて

参考: D言語のUFCSが好きだ!

よく使われるモジュール

std.algorithm

std.algorithmのコマンドを使ってメソッドチェーンを使っている人が多い気がします。あとで自分もまとめたいと思っていますが、mapとか調べれば出てくるかと。

プロパティ

プロパティとは型やオブジェクトの特徴や特性を表わすものです。これをちゃんと付けてあげないと要素がコピー出来ないなんてことがよくあります.
詳しいことは参考にありますがここでは要素をコピーするのに必要なプロパティをまとめておきます。

.dup
配列を確実にコピーするときに
.array
Rengeを配列に変換する.これがなくてうまくうごかないこともあり

参考:
プロパティ
配列
D言語友の会-プロパティ

コード集

C++でいうresize(size,'a')の処理

//'a'をn回繰り返した配列を作る
char[] str = 'a'.repeat(n).array;

テキスト入力

import std.file, std.string, std.algorithm, std.array;

//チェインメソッドを使わない処理
string[] text = splitLines(readText("text.txt"));
string[] hoge;

foreach(int i; text){
    hoge[i] = text[i];
}


//最初にデータをすべて読み込んで一気に分割する方法
//対象ファイルが大きいと結構メモリを食うらしい
string[] text2 = splitLines(readText("text.txt")).map!strip.array;

//各行を順々に処理
auto strippedLines = File("text.txt").byLineCopy().map!strip.array;

参考: 弱小PHPerのD言語挑戦記4

キーボード入力?

import std.string, std.algorithm, std.array, std.conv;

//任意の要素をint型に変換して格納
//入力するときはスペースで区切る
//もっといいやり方あるよね...
string[] input = readln().split;
int num = input[0].to!int;

//intの配列に代入
int[] a = readln().split.map!(to!int).array

※readln()について
buf = readln()という形にするよりreadln(buf)のほうが高速らしいです

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1