ofList
の機能がofSeq
を超える理由はありますか?リストを他のコレクションタイプに変換していますか?Seq関数とofList関数の違いは何ですか?
答えて
各アプローチ間にパフォーマンスの差がありますが、通常はより優れた結果を得るために特殊化されたコンバージョンが期待されます。例を与えるために
、Array.ofList
は、この機能(https://github.com/fsharp/fsharp/blob/37a100b7caafde0f4df5a1924c9f65f4a18277a8/src/fsharp/FSharp.Core/local.fs#L300)を介して実装されている:Seq.toArray
スルー
let toArray (l:'T list) =
let len = l.Length
let res = arrayZeroCreate len
let rec loop i l =
match l with
| [] ->()
| h::t ->
res.[i] <- h
loop (i+1) t
loop 0 l
res
Array.ofSeq
ながら作品(https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs#L1231):
let toArray (source : seq<'T>) =
checkNonNull "source" source
match source with
| :? ('T[]) as res -> (res.Clone() :?> 'T[])
| :? ('T list) as res -> List.toArray res
| :? ICollection<'T> as res ->
// Directly create an array and copy ourselves.
// This avoids an extra copy if using ResizeArray in fallback below.
let arr = Array.zeroCreateUnchecked res.Count
res.CopyTo(arr, 0)
arr
| _ ->
let res = ResizeArray<_>(source)
res.ToArray()
注意そのしかし、この場合、 ofSeq
関数は、実際に供給されたシーケンスが実際にはlist
であるかどうかをチェックし、そうであれば特殊な変換を使用しますn。
変換のためにSeq関数を優先するのは安全ですか(実際に型をチェックして特殊な変換を選択する場合)?ベストプラクティスは何ですか? – SetyCZ
@SetyCZそれを使用するのは安全ですが、私はそれを好むことをお勧めしません。たとえば、カスタムコレクションを使って作業していた場合、これらの余分なチェックが行われない可能性があるので、適切な習慣をつけるのが最善だと思います。また、より専門的な変換を使用することが適切であるとすれば、より慣用的であり、他の人があなたのコードを一目で読み取ることが容易になると思います。 – TheInnerLight
- 1. javascriptのvar関数と関数の違いは何ですか?
- 2. コールバック関数と正規関数の違いは何ですか?
- 3. スレッドエントリ関数と通常関数の違いは何ですか?
- 4. 関数と*関数の違いは何ですか?
- 5. JS:関数式と関数式の違いは何ですか?
- 6. プロトタイプ関数とjavascriptの通常の関数との違いは何ですか?
- 7. PHP5.3で参照関数と通常関数の違いは何ですか?
- 8. RegExpのexec()関数とStringのmatch()関数の違いは何ですか?
- 9. Pythonのjson.load()関数とjson.loads()関数の違いは何ですか?
- 10. Win32 APIの `A`関数と` W`関数の違いは何ですか?
- 11. インラインメンバー関数と通常メンバー関数の違いは何ですか?
- 12. 非純粋関数と純粋関数の違いは何ですか?
- 13. seqとseqの違いは何ですか?
- 14. SparkでsortとorderBy関数の違いは何ですか
- 15. MATLABのスクリプトと関数の違いは何ですか?
- 16. c socket()関数の型とプロトコルの違いは何ですか?
- 17. のfile_get_contentsと関数freadの違いは何ですか
- 18. Seqモジュールの集計関数
- 19. キャッシュ! saveLocations()とaddLocation()関数の違いは何ですか?
- 20. コルーチンC++インライン関数との違いは何ですか?
- 21. Jest Mock関数とSinonスパイの違いは何ですか
- 22. 関数定義とクラス定義の違いは何ですか
- 23. メソッドとフリー関数の微妙な違いは何ですか?
- 24. ハンドラとコールバック関数の違いは何ですか?
- 25. setcookie()関数とsession_set_cookie_params()関数の違い
- 26. on_exit()関数とatexit()関数に違いはありますか?
- 27. スカラのジェネリック関数と多相引数型の違いは何ですか?
- 28. リターン関数と変数の格納の違いは何ですか?
- 29. Clojureでは、関数、引用された関数とシャープクォート関数の違い
- 30. この2つのWordpress関数の違いは何ですか?
例を挙げてこれを明確にすることはできますか? – s952163
@GuyCoder 'ofList'は" to toList "ではなく、" List to x "です。 – sepp2k
どちらが機能しますか? 'Array.ofList'? 'Set.ofList'? 'Map.ofList'? 'Array.ofSeq'? 'Set.ofSeq'? 'Map.ofSeq'? 'List.ofSeq'? 'Seq.ofList'? –