コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2013年11月27日 >>> 2013年11月14日
link もっと後

2013年11月27日

Scala ArrayBufferのイテレータ

最近Scalaにチャレンジしていますが、イテレータの動きがよくわかりません。

Scala Documentation(リンク)にはtake(n) でイテレータがn要素先に進む、という記述があるのですが、ArrayBufferのイテレータはそうなっていません。たぶん。

下記のコードを使って確かめました。7要素持っているバッファから、2要素、3要素、4要素、とtake(n) していくコードです。val it4 = take(4) は4要素取ろうとしますが、要素が足りず2要素しか取れないことを期待しています。

テストコード

val a = scala.collection.mutable.XXXXXX(0, 1, 2, 3, 4, 5, 6)

val it = a.iterator
val it2 = it.take(2)
val it3 = it.take(3)
val it4 = it.take(4) //実際には2要素しか取れないはず

it2.toList
it3.toList
it4.toList
it.toList

まずはXXXXXXの部分をListBufferにします。結果は期待通りです。

ListBufferのイテレータ
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val a = scala.collection.mutable.ListBuffer(0, 1, 2, 3, 4, 5, 6)
a: scala.collection.mutable.ListBuffer[Int] = ListBuffer(0, 1, 2, 3, 4, 5, 6)


scala> val it = a.iterator
it: Iterator[Int] = non-empty iterator

scala> val it2 = it.take(2)
it2: Iterator[Int] = non-empty iterator

scala> val it3 = it.take(3)
it3: Iterator[Int] = non-empty iterator

scala> val it4 = it.take(4)
it4: Iterator[Int] = non-empty iterator


scala> it2.toList
res0: List[Int] = List(0, 1)

scala> it3.toList
res1: List[Int] = List(2, 3, 4)

scala> it4.toList
res2: List[Int] = List(5, 6)

scala> it.toList
res3: List[Int] = List()

次にXXXXXXの部分をArrayBufferにします。take(n) 自体は成功しますが、イテレータは進まずに常に先頭の要素を指すイテレータが返されてしまいます。

ArrayBufferのイテレータ
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val a = scala.collection.mutable.ArrayBuffer(0, 1, 2, 3, 4, 5, 6)
a: scala.collection.mutable.Buffer[Int] = ArrayBuffer(0, 1, 2, 3, 4, 5, 6)


scala> val it = a.iterator
it: Iterator[Int] = non-empty iterator

scala> val it2 = it.take(2)
it2: Iterator[Int] = non-empty iterator

scala> val it3 = it.take(3)
it3: Iterator[Int] = non-empty iterator

scala> val it4 = it.take(4)
it4: Iterator[Int] = non-empty iterator


scala> it2.toList
res0: List[Int] = List(0, 1)

scala> it3.toList
res1: List[Int] = List(0, 1, 2)

scala> it4.toList
res2: List[Int] = List(0, 1, 2, 3)

scala> it.toList
res3: List[Int] = List(0, 1, 2, 3, 4, 5, 6)

IteratorのScala-doc(リンク)を見ると「take呼んだ後のイテレータは再利用すんなボケナス(意訳)」って書いてあるように読めます。

じゃあイテレータを再利用して良いのはどういう場合?next() だけ?不便だなあ…。

編集者:すずき(2013/11/27 20:04)

コメント一覧

  • よしださん(2013/12/02 01:49)
    Scalaどうですか?
    Javaほとんどやったことない&コンパイルが必要(?)ということで敷居が高そうというイメージがあって手をだせていません。
  • すずきさん(2013/12/02 03:16)
    >よしださん
    関数言語+オブジェクト指向、という方向は好きですが、使いこなせていないです。
    特に関数型言語の部分は馴染みがなくて使うのがキツイので、無視してBetter Javaとして使ってます。

    開発環境はIntelliJ IDEA&Scala Pluginを使いましたが、コンパイル環境の設定が良くわかりません…。
    GUIの開発環境が不要なら、Ant(makeのJava版)からもコンパイル可能です。今はAntよりMavenという話も聞きますが、使ったことないのでなんとも言えないです。

    Rubyのirb的な対話環境もあるので、ちょっと試すならそちらの方が良いです。Linuxならyumとかaptとかで簡単に入れられるはず。
  • よしださん(2013/12/03 01:10)
    2年前にコップ本を読んで勉強しようとするも挫折した記憶がよみがえります。
    なんかいい題材があればいいのだけど。
    とりあえずapt-getしてみます。ありがとう!

    やっぱり val いっぱい使わないとメリットがでなかったりするのかしらね。
  • すずきさん(2013/12/03 03:39)
    >よしださん
    私も 1冊目にオライリー「プログラミングScala」を選んでしまって、やっちまった感が満載です。
    今からさらにコップ本を読む気が起きません…。

    >なんかいい題材があればいいのだけど。
    Rubyから移植してみるのはどうでしょう?

    >やっぱり val いっぱい使わないとメリットがでなかったりするのかしらね。
    うーん、頑張ったら速くなるかもしれませんが…。この手の言語や、スクリプト言語に性能は期待してないです。
    とりあえず快適&簡潔に書ければそれで良しです。
open/close この記事にコメントする



2013年11月19日

FacebookのRSS Graffitiアプリ

この日記サイトと、Facebookを連携させるためにFacebookのRSS Graffitiというアプリを使っていたのですが、いつのまにかFacebookのRSS Graffitiが動かなくなっていました…。

どうもこの日記サイトの出力するRSSが悪いようです。色々出力を変えて試してみるとRSS 1.0のdescriptionが長すぎるとRSS Graffitiがエラーを出します。SeaMonkeyで確認しても、descriptionが長い(80列くらい?)とエラーが出ます。

規格ではdescriptionは500バイト以内推奨だったはずなのになあ…?

メモ: 技術系?の話はFacebookから転記しておくことにした。一部、改変、追記あり。

編集者:すずき(2014/03/17 21:53)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2013年11月18日

フィリピンの復興を祈って

日本赤十字社で2013年フィリピン台風被害の救援金を募集(2013年11月11日〜)していたので、1万円ほど寄付してみた。フィリピンの復興に役立つと良いなあ。

クレジットカードが使える上に、1円単位で好きな金額を寄付できます。かなり便利です。

【日本赤十字社】寄付・献血・ボランティア|2013年フィリピン台風救援金

救援金とは?

救援金って何?という疑問への答えは、日本赤十字社のQ&Aコーナーの3つ目
「「義援金」と「救援金」はどう違うのですか?」
に書いてあります。

ざっくり言うと、日赤の被災地での活動資金として使われるのが「救援金」で、被災者の方々に直接届くわけではないとのこと。

【日本赤十字社】寄付・献血・ボランティア|よくあるご質問

メモ: 技術系?の話はFacebookから転記しておくことにした。

編集者:すずき(2014/03/17 00:11)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2013年11月17日

Wi-Fi復活か?

先日(2013年11月2日の日記参照)まで調子が非常に悪かった、ノートPCのWi-Fiですが、いつの間にか症状が改善していました。何故…。

そういえば最近、無線LANアクセスポイント(NEC Aterm WR8700N)のファームウェアをバージョンアップした気がします。

WR8700Nのファームウェア更新内容の説明を見ると「4. 一部のご利用環境での通信の安定性を向上しました。」とありますので、この更新がクリーンヒットだった?かもしれません。

今週はずっとPC買い換えるべきか?と、迷っていたくらいだったので、Wi-Fiの調子が上向いてきて良かった良かった。

編集者:すずき(2013/11/17 02:05)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2013年11月16日

結婚式

会社の先輩の結婚式(二次会)に参加しました。二次会からだと場の雰囲気が良くわからなくて困りますね…。

本当は披露宴から出たかったのですが、会社というか人事から「研修先は、土曜も出勤あるかも?」などという紛らわしい連絡(※)されたおかげで、参加不能になってしまいました。ありもしない休日出勤ちらつかせて、一体何の嫌がらせだったんだろ?

(※)実際に研修先に行ってみたら、土曜出勤なんて全くなかった。

編集者:すずき(2013/11/17 01:50)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2013年11月27日 >>> 2013年11月14日
link もっと後

管理用メニュー

link 記事を新規作成

<2013>
<<<11>>>
-----12
3456789
10111213141516
17181920212223
24252627282930

最近のコメント5件

  • link 20年6月19日
    すずきさん (04/06 22:54)
    「ディレクトリを予め作成しておけば良いです...」
  • link 20年6月19日
    斎藤さん (04/06 16:25)
    「「Preferencesというメニューか...」
  • link 21年3月13日
    すずきさん (03/05 15:13)
    「あー、このプログラムがまずいんですね。ご...」
  • link 21年3月13日
    emkさん (03/05 12:44)
    「キャストでvolatileを外してアクセ...」
  • link 24年1月24日
    すずきさん (02/19 18:37)
    「簡単にできる方法はPowerShellの...」

最近の記事3件

  • link 24年4月12日
    すずき (04/16 00:12)
    「[台湾東部沖地震に寄付] ささやかではありますが台湾東部沖地震に寄付しました。日本の赤十字社→台湾の赤十字(正式名称...」
  • link 23年4月10日
    すずき (04/16 00:10)
    「[Linux - まとめリンク] 目次: Linuxカーネル、ドライバ関連。Linuxのstruct pageって何?Linu...」
  • link 22年9月3日
    すずき (04/16 00:08)
    「[MarkDownのその向こう] 目次: Linux簡単なドキュメントやメモはMarkDownで書くことが多いですが、気合を入...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 04/16 00:12