開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の15章(データベース)、15.11(練習問題)、2-i.をDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
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 コメント:
コメントを投稿