2014年1月16日木曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の15章(データベース)、15.11(練習問題)、2-i.をDartで解いてみる。

その他参考書籍

15.11(練習問題)、2-i.

コード

sample.dart

import 'dart:html';
import 'dart:indexed_db' as idb;
import 'dart:async' as async;

void main() {
  run.onClick.listen((MouseEvent event){
    pre.text = window.navigator.userAgent + '\n';
    if(idb.IdbFactory.supported){
      states = [];
      window.indexedDB.open('census.db',
          version: 3,
          onUpgradeNeeded: _initializeDatabase)
      .then(_loadFromDB)
      .then(_show);
    } else {
      pre.text += 'このブラウザではindexedDBは使用出来ません';
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

ButtonElement run= querySelector('#run_dart');
ButtonElement clear = querySelector('#clear');
PreElement pre = querySelector('#pre0');
List<Map> states = [];

async.Future _loadFromDB(idb.Database db){
  var transaction = db.transaction('Density', 'readwrite');
  var object_store = transaction.objectStore('Density');
  var cursors = object_store.openCursor(autoAdvance: true).asBroadcastStream();
  cursors.listen((var cursor) {
    var value = cursor.value;
    var population = value['Population'];
    states.add({'State': value['State'],
                'Population': value['Population'],
                'Area': value['Area']});
  });
  return transaction.completed;
}

void _initializeDatabase(idb.VersionChangeEvent e) {
  idb.Database db = (e.target as idb.Request).result;
  var object_store = db.createObjectStore('Capitals',
      keyPath:'State',
      autoIncrement: true);
}

void _show(idb.Database db){
  var result = [];
  pre.text += '人口密度の差が0.5人/km^2以下の州の組合せ\n';
  var temp = states.toList();
  for(var state in states){
    for(var t in temp){
      String state1 = state['State'];
      String state2 = t['State'];
      if(state1.compareTo(state2) < 0 &&
          (state['Population'] / state['Area'] -
              t['Population'] / t['Area']).abs() < 0.5){
        result.add([state1, state2]);
      }
    }
  }
  for(var x in result){
    pre.text += '$x\n';
  }
  pre.text += '終了\n';
}















						

0 コメント:

コメントを投稿