0 people like it.
Like the snippet!
Calculate left margins
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
let margins (lines : seq<string>) =
let marginWidth (line : string) =
line.Length - line.TrimStart([|' '|]).Length
lines
|> Seq.map (fun line -> marginWidth line)
|> Seq.countBy (fun width -> width)
|> Seq.filter (fun margCount -> fst(margCount) > 0)
|> Seq.sortBy (fun margCount -> -snd(margCount))
// Example:
let lines = [
"This has no margin."
" This has a one-space margin."
" So does this."
" These three lines have a six-space margin."
" Again with the six-space margin."
" And again."
" Back to one space."
" And finally, another six space."
]
// Output: seq [(6, 4); (1, 3)]
lines |> margins
|
val margins : lines:seq<string> -> seq<int * int>
Full name: Script.margins
val lines : seq<string>
Multiple items
val seq : sequence:seq<'T> -> seq<'T>
Full name: Microsoft.FSharp.Core.Operators.seq
--------------------
type seq<'T> = System.Collections.Generic.IEnumerable<'T>
Full name: Microsoft.FSharp.Collections.seq<_>
Multiple items
val string : value:'T -> string
Full name: Microsoft.FSharp.Core.Operators.string
--------------------
type string = System.String
Full name: Microsoft.FSharp.Core.string
val marginWidth : (string -> int)
val line : string
property System.String.Length: int
System.String.TrimStart([<System.ParamArray>] trimChars: char []) : string
module Seq
from Microsoft.FSharp.Collections
val map : mapping:('T -> 'U) -> source:seq<'T> -> seq<'U>
Full name: Microsoft.FSharp.Collections.Seq.map
val countBy : projection:('T -> 'Key) -> source:seq<'T> -> seq<'Key * int> (requires equality)
Full name: Microsoft.FSharp.Collections.Seq.countBy
val width : int
val filter : predicate:('T -> bool) -> source:seq<'T> -> seq<'T>
Full name: Microsoft.FSharp.Collections.Seq.filter
val margCount : int * int
val fst : tuple:('T1 * 'T2) -> 'T1
Full name: Microsoft.FSharp.Core.Operators.fst
val sortBy : projection:('T -> 'Key) -> source:seq<'T> -> seq<'T> (requires comparison)
Full name: Microsoft.FSharp.Collections.Seq.sortBy
val snd : tuple:('T1 * 'T2) -> 'T2
Full name: Microsoft.FSharp.Core.Operators.snd
val lines : string list
Full name: Script.lines
More information