スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門編落穂拾い その11(ResizeArray)

ResizeArrayはArrayの要素数が変化できる版です。
ResizeArray<'a>は、C#では、おなじみのSystem.Collections.Generic.List<T>型の別名です。
 
まずは作成ですが、例えばstring型のResizeArrayであれば、次のように行います。
 
> open System.Collections.Generic;;
> let t = new ResizeArray<string>();;
 
val t : ResizeArray<string>
 
追加はaddを用います。
 
> t.Add("F#");;
val it : unit = ()
> t;;
val it : ResizeArray<string> = seq ["F#"]
 
複数の要素を一度に追加するにはAddRangeが利用できます。
 
> t.AddRange;;
val it : (seq<string> -> unit) = <fun:it@5>
 
ということでseq<string>型なら何でも使えるので、例えば次のように利用します。
 
> t.AddRange(["C#";"Java"]);;
val it : unit = ()
> t;;
val it : ResizeArray<string> = seq ["F#"; "C#"; "Java"]
 
要素数はCountを使います。
 
> t.Count;;
val it : int = 3
 
特定の位置に要素を挿入するにはInsertを利用します。
 
> t.Insert;;
val it : (int * string -> unit) = <fun:it@9-1>
 
> t.Insert(1,"Lisp");;//0なら先頭
val it : unit = ()
> t;;
val it : ResizeArray<string> = seq ["F#"; "Lisp"; "C#"; "Java"]
 
n番目の要素の値を調べるにはArrayと同様に.[]かItemを使います。
 
> t.[1];;
val it : string = "Lisp"
 
> t.Item(1);;
val it : string = "Lisp"
 
ある値の要素があるかないかはContainsを用います。
> t.Contains("Lisp");;
val it : bool = true
 
特定の条件を満たす要素があるかないかはExistsを用います。
> t.Exists(fun s -> s.Length = 2);; //文字列の長さが2のものがあるかないか
val it : bool = true
 
ここでもう一度tの内容を表示しておきます。
 
> t;;
val it : ResizeArray<string> = seq ["F#"; "Lisp"; "C#"; "Java"]
 
特定の条件を満たす要素のindexを調べるにはFindIndex,FindIndex,FindLastIndex
 
> t.FindIndex(fun s -> s.Length = 2);;//条件を満たす最初の要素のindexが返ります。
val it : int = 0
 
> t.FindIndex(1,fun s -> s.Length = 2);; //index1以降で調べます。
val it : int = 2
 
> t.FindLastIndex(fun s -> s.Length = 2);;//条件を満たす最後の要素のindexが返ります。
val it : int = 2
 
> t.FindLastIndex(1,fun s -> s.Length = 2);; //index1以前で調べます。
val it : int = 0 
 
なお見つからないときは-1が返ります。
 
indexではなく、値そのものを取り出すにはFind,FindLastを利用します。
 
> t.Find(fun s -> s.Length = 2);;
val it : string = "F#" //条件を満たす最初の要素が返ります。
 
> t.FindLast(fun s -> s.Length = 2);;
val it : string = "C#" //条件を満たす最後の要素が返ります。
 
条件を満たす値全部をリストにして返すにはFindAllを使います。
 
> t.FindAll(fun s -> s.Length = 2);;
val it : List<string> = seq ["F#"; "C#"]
 
逆転はReverseを使います。
 
> t.Reverse();;
val it : unit = ()
 
> t;;
val it : ResizeArray<string> = seq ["Java"; "C#"; "Lisp"; "F#"]
 
配列への変換はToArrayを用います。
 
> let u = t.ToArray();;
val u : string [] = [|"Java"; "C#"; "Lisp"; "F#"|]
 
なお既存のArrayの一部(全部)に内容をコピーするのはToCopyを用います。
 
> let arr = Array.create 5 "";;
val arr : string [] = [|""; ""; ""; ""; ""|]
 
> t.CopyTo arr;; //tの要素をarrにコピー(最初から)
val it : unit = ()
 
> arr;;
val it : string [] = [|"Java"; "C#"; "Lisp"; "F#"; ""|]
 
> t.CopyTo (arr,1);;//tの要素をarrにコピー(index 1 から)
val it : unit = ()
 
> arr;;
val it : string [] = [|"Java"; "Java"; "C#"; "Lisp"; "F#"|]
 
> t.CopyTo (1,arr, 3,2);; //tのindex 1からの要素を2個、arrのindex 3を開始indexにして複写します。
val it : unit = ()
> arr;;
val it : string [] = [|"Java"; "Java"; "C#"; "C#"; "Lisp"|]
 
要素を取り除くのはRemoveを使います。
 
> t.Remove("C#");;
val it : bool = true
 
> t;;
val it : ResizeArray<string> = seq ["Java"; "Lisp"; "F#"]
 
特定の位置の要素を取り除くのはRemoveAtを利用します。
 
> t.RemoveAt(1);;
val it : unit = ()
 
> t;;
val it : ResizeArray<string> = seq ["Java"; "F#"]
 
全てを取り除くのはClearを使います。
 
> t.Clear();;
val it : unit = ()
 
> t;;
val it : ResizeArray<string> = seq []
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。