Open2

Mapのネストした値を取り出す。

JboyHashimotoJboyHashimoto

フィルタリングをやってみる

ネストした値を取り出したい。

void main() {
  // ネストしたオブジェクト
  Map<String, dynamic> account = {
    'name': 'Mike',
    'age': 25,
    'expenses': {
      'food': 100,
      'rent': 300,
      'insurance': 200,
    },
    'income': 1000,
  };

  Map<String, int> searchFilter(Map<String, dynamic> account, String key, int minValue) {
    // expensesオブジェクトをMapからListに変換
    List<MapEntry<String, int>> expensesArray = (account['expenses'] as Map<String, int>).entries.toList();

    // filterを1回だけ使用して、指定した条件に一致する項目を抽出
    List<MapEntry<String, int>> result = expensesArray
        .where((entry) => entry.key == key && entry.value > minValue)
        .toList();

    // 結果をMapに戻す
    Map<String, int> filteredExpenses = Map.fromEntries(result);
    return filteredExpenses;
  }

  // searchFilter関数を使用してフィルタリング
  Map<String, int> filteredExpenses = searchFilter(account, 'rent', 200);

  print(filteredExpenses); // {rent: 300}
}
JboyHashimotoJboyHashimoto

loopと組み合わせる

index番目から取得する。

void main() {
  // Map型のpersonを定義
  Map<String, dynamic> person = {
    'name': 'Alice',
    'age': 25,
    'isStudent': false,
    'likeFood': [
      {
        'name': 'apple',
        'calorie': 52,
      },
      {
        'name': 'banana',
        'calorie': 89,
      },
      {
        'name': 'orange',
        'calorie': 47,
      },
    ],
    'place': {
      'country': 'Japan',
      'city': 'Tokyo',
    },
    'country': [
      {'ja': '日本'},
      {'en': 'アメリカ'},
      {'fr': 'フランス'},
      {'de': 'ドイツ'},
    ],
  };

  // personのlikeFoodリストを出力
  List<String> searchProfile(Map<String, dynamic> person, String value) {
    // likeFoodリストを取得
    List<Map<String, dynamic>> likeFood = List<Map<String, dynamic>>.from(person['likeFood']);

    // whereメソッドで、valueが一致するものを抽出
    List<String> result = likeFood
        .where((element) => element['name'] == value)
        .map((element) => element['name'] as String)
        .toList();

    // 結果を返す
    return result;
  }

  // 国名から人物を検索
  // place key の中に country key がある場合、その値を取得
  String searchCountry(Map<String, dynamic> person, String country) {
    // countryが一致するかどうかを判定
    if (person['place']['country'] == country) {
      return person['name'];
    } else {
      return 'Not Found';
    }
  }

  // country key の中に ja key がある場合、その値を取得
  // indexで取得
  String countryFiltter(Map<String, dynamic> person, String country) {
    // countryが一致するかどうかを判定
    for (var i = 0; i < person['country'].length; i++) {
      if (person['country'][i]['ja'] == country) {
        return person['name'];
      }
    }
    return 'Not Found';
  }

  // 検索結果を表示
  List<String> result = searchProfile(person, 'banana');
  print(result); // ['banana']

  String result2 = searchCountry(person, 'Japan');
  print(result2); // Alice

  String result3 = countryFiltter(person, '日本');
  print(result3); // Alice
}