🤖

【Dart】データ型(String, List, Map, Set, DateTime)

2023/04/22に公開

Dartのデータ型(String, List, Map, Set, DateTime)についてまとめています。
Dartにおいて、データ型は主にCoreとCollectionの2つのカテゴリに分類されます。

CoreとCollection

Core は、プログラム内で値を表現する基本的なデータ構造を提供しています。
一方で、Collection は、複数の値を一つのデータ構造にまとめるためのデータ型です。

CoreとCollectionの違いは、Core はプログラム内で単一の値 を表現するために使用されますが、Collection複数の値 を一まとめにするデータ構造を提供している点です。

Core

Coreには、以下のようなデータ型があります。

  • int
  • double
  • String
  • bool

https://api.dart.dev/stable/2.19.6/dart-core/dart-core-library.html
今回は、String のみ取り上げます。

String

Stringは文字列のみ変数に代入できるデータ構造です。
Stringは、以下のように文字列の長さを取得、文字列の連結、部分表示、検索、置換、分割、大文字/小文字変換 などを行うことができます。
https://api.dart.dev/stable/2.19.6/dart-core/String-class.html

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は、重複する要素が存在しないデータ構造

https://api.dart.dev/stable/2.19.6/dart-collection/dart-collection-library.html
それでは一つずつ順番に取り上げていきます。

List

Listは、同じ型の値を複数格納することができるデータ構造です。
Listは、以下のようにリストの長さを取得、要素の追加、削除、特定のインデックスにある要素を取得、特定のインデックスにある要素を交換、リストを反転、ソート などを行うことができます。
https://api.dart.dev/stable/2.19.6/dart-core/List-class.html

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の反復処理 などを行うことができます。
https://api.dart.dev/stable/2.19.6/dart-core/Map-class.html

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は、以下のように要素の追加、削除、確認、表示、長さの取得 などを行うことができます。
https://api.dart.dev/stable/2.19.6/dart-core/Set-class.html

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は、以下のように現在の日付・時刻の取得、特定の日付・時刻を表示、プロパティへのアクセス、日付と時刻の差を計算、加算、減算、比較 などを行うことができます。
https://api.dart.dev/stable/2.19.6/dart-core/DateTime-class.html

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