【Dart】データ型(String, List, Map, Set, DateTime)
Dartのデータ型(String, List, Map, Set, DateTime)についてまとめています。
Dartにおいて、データ型は主にCoreとCollectionの2つのカテゴリに分類されます。
CoreとCollection
Core は、プログラム内で値を表現する基本的なデータ構造を提供しています。
一方で、Collection は、複数の値を一つのデータ構造にまとめるためのデータ型です。
CoreとCollectionの違いは、Core はプログラム内で単一の値 を表現するために使用されますが、Collection は複数の値 を一まとめにするデータ構造を提供している点です。
Core
Coreには、以下のようなデータ型があります。
- int
- double
- String
- bool
今回は、String のみ取り上げます。
String
Stringは文字列のみ変数に代入できるデータ構造です。
Stringは、以下のように文字列の長さを取得、文字列の連結、部分表示、検索、置換、分割、大文字/小文字変換 などを行うことができます。
Stringの扱い方
String myString = 'Hello, World!';
print(myString);
// 出力結果 → Hello, World
/// 文字列の長さ
print(myString.length);
// 出力結果 → 13
/// 文字列の連結
String str1 = 'Hello';
String str2 = 'World';
print(str1 + ' ' + str2);
// 出力結果 → Hello World
/// 文字列の部分表示
print(myString.substring(0, 5));
// 出力結果 → Hello
/// 文字列の検索
print(myString.indexOf('W'));
// 出力結果 → 7
/// 文字列の置換
print(myString.replaceAll('World', 'Dart'));
// 出力結果 → Hello, Dart!
/// 文字列の分割
print(myString.split(' '));
// 出力結果 → [Hello, Dart!]
/// 文字列の大文字変換
print(myString.toUpperCase());
// 出力結果 → HELLO, WORLD!
/// 小文字変換
print(myString.toLowerCase());
// 出力結果 → hello, world!
Collection
Collectionには、以下のようなデータ型があります。
- List
- Map
- Set
List, Map, Setの違い は、簡潔に言うと以下です。
- Listは、順序付けられた要素のデータ構造
- Mapは、キーと値のベアのデータ構造
- Setは、重複する要素が存在しないデータ構造
それでは一つずつ順番に取り上げていきます。
List
Listは、同じ型の値を複数格納することができるデータ構造です。
Listは、以下のようにリストの長さを取得、要素の追加、削除、特定のインデックスにある要素を取得、特定のインデックスにある要素を交換、リストを反転、ソート などを行うことができます。
Listの扱い方
/// リストを作成
var myList = [0, 1, 2, 3, 4];
print(myList);
// 出力結果 → [0, 1, 2, 3, 4]
/// 長さを取得
print(myList.length);
// 出力結果 → 5
/// 要素を追加
myList.add(5);
print(myList);
// 出力結果 → [0, 1, 2, 3, 4, 5]
/// 要素を削除
myList.remove(5);
print(myList);
// 出力結果 → [0, 1, 2, 3, 4]
/// 特定のインデックスにある要素を取得
print(myList[0]);
// 出力結果 → 0
/// 特定のインデックスにある要素を交換
myList[0] = 100;
print(myList);
// 出力結果 → [100, 1, 2, 3, 4]
/// リストを反転
print(myList.reversed);
// 出力結果 → (4, 3, 2, 1, 100)
/// リストをソート
myList.sort();
print(myList);
// 出力結果 → [1, 2, 3, 4, 100]
Map
Mapは、Keyと呼ばれる値とValueと呼ばれる値を紐づけて格納することができるデータ構造です。
Mapは、以下のように要素の追加、取得、削除、長さの取得、Mapの反復処理 などを行うことができます。
Mapの扱い方
/// Mapの作成
var myMap = {'key1': 'value1', 'key2': 'value2'};
print(myMap);
// 出力結果 → {key1: value1, key2: value2}
/// Constructorを使用したMapの作成
var constructorMap = Map<String, String>();
print(constructorMap);
// 出力結果 → {}
/// 要素の追加
myMap['key3'] = 'value3';
/// 要素の取得
print(myMap['key1']);
// 出力結果 → value1
/// 要素の削除
myMap.remove('key1');
/// Mapの反復処理
myMap.forEach((key, value) {
print('Key: $key, Value: $value');
});
// 出力結果 → key2: value3
// key2: value2
/// Mapのサイズ
print(myMap.length);
// 出力結果 → 2
Set
Setは、重複なしの複数のデータを格納できるデータ構造です。
Setは、以下のように要素の追加、削除、確認、表示、長さの取得 などを行うことができます。
Setの扱い方
/// Setの作成
Set<String> mySet = Set<String>();
/// 要素の追加
mySet.add('apple');
mySet.add('banana');
mySet.add('orange');
print(mySet);
// 出力結果 → {apple, banana, orange}
/// 要素の削除
mySet.remove('banana');
print(mySet);
// 出力結果 → {apple, orange}
/// 要素数の確認
print(mySet.length);
// 出力結果 → 2
/// 要素の存在を確認
print(mySet.contains('apple'));
// 出力結果 → true
/// 要素を表示
for (String element in mySet) {
print(element);
}
// 出力結果 → apple
// orange
Date and Time
Dartで使用できるデータ型には、日時を指定できるものもあります。
DateTime
DateTimeは、年、月、日、時間、分、秒、ミリ秒、マイクロ秒まで指定することができます。
DateTimeは、以下のように現在の日付・時刻の取得、特定の日付・時刻を表示、プロパティへのアクセス、日付と時刻の差を計算、加算、減算、比較 などを行うことができます。
DateTimeの扱い方
/// 現在の日付と時刻を取得
DateTime now = DateTime.now();
print(now);
// 出力結果 → 2023-04-21 23:32:31.117148
/// 特定の日付と時刻を表すDateTimeオブジェクトを作成
DateTime specificDate = DateTime(2023, 4, 21);
DateTime specificDateTime = DateTime(2023, 4, 21, 23, 00);
print(specificDate);
print(specificDateTime);
// 出力結果 → 2023-04-21 00:00:00.000
// 出力結果 → 2023-04-21 23:00:00.000
/// DateTimeオブジェクトのプロパティにアクセス
int year = specificDate.year;
int month = specificDate.month;
int day = specificDate.day;
print(year);
print(month);
print(day);
// 出力結果 → 2023
// 出力結果 → 4
// 出力結果 → 21
/// 日付と時刻の差を計算
DateTime date1 = DateTime(2023, 4, 21);
DateTime date2 = DateTime(2023, 5, 1);
Duration difference = date2.difference(date1);
print(difference);
// 出力結果 → 240:00:00.000000
/// 日付と時刻を加算または減算
DateTime addDate = specificDateTime.add(Duration(days: 1));
DateTime subtractDate = specificDateTime.subtract(Duration(days: 1));
print(addDate);
print(subtractDate);
// 出力結果 → 2023-04-22 23:00:00.000
// 出力結果 → 2023-04-20 23:00:00.000
/// 日付と時刻の比較
bool isBefore = specificDateTime.isBefore(DateTime.now());
bool isAfter = specificDateTime.isAfter(DateTime.now());
bool isAtSameMomentAs = specificDateTime.isAtSameMomentAs(DateTime.now());
print(isBefore);
print(isAfter);
print(isAtSameMomentAs);
// 出力結果 → true
// 出力結果 → false
// 出力結果 → false
間違いやご指摘などありましたら、コメントお待ちしております🙇♂️
Discussion