F# - 可变列表



List<'T> 类表示一个强类型对象列表,可以通过索引访问。

它是 List 类的可变对应物。它类似于数组,因为它可以通过索引访问,但是,与数组不同的是,列表可以调整大小。因此,您无需在声明期间指定大小。

创建可变列表

使用new关键字并调用列表的构造函数来创建列表。以下示例演示了这一点:

(* Creating a List *)
open System.Collections.Generic

let booksList = new List<string>()
booksList.Add("Gone with the Wind")
booksList.Add("Atlas Shrugged")
booksList.Add("Fountainhead")
booksList.Add("Thornbirds")
booksList.Add("Rebecca")
booksList.Add("Narnia")

booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])

编译并执行程序时,将产生以下输出:

0: Gone with the Wind
1: Atlas Shrugged
2: Fountainhead
3: Thornbirds
4: Rebecca
5: Narnia

List(T) 类

List(T) 类表示一个强类型对象列表,可以通过索引访问。它提供用于搜索、排序和操作列表的方法。

下表提供了 List(T) 类的属性、构造函数和方法:

属性

属性 描述
Capacity 获取或设置内部数据结构在不调整大小的情况下可以容纳的元素总数。
Count 获取 List(T) 中包含的元素数。
Item 获取或设置指定索引处的元素。

构造函数

构造函数 描述
List(T)() 初始化一个新的空 List(T) 类实例,并具有默认初始容量。
List(T)(IEnumerable(T)) 初始化一个新的 List(T) 类实例,其中包含从指定集合复制的元素,并且具有足够的容量来容纳复制的元素数。
List(T)(Int32) 初始化一个新的空 List(T) 类实例,并具有指定的初始容量。

方法

方法 描述
Add 将对象添加到 List(T) 的末尾。
AddRange 将指定集合的元素添加到 List(T) 的末尾。
AsReadOnly 返回当前集合的只读 IList(T) 包装器。
BinarySearch(T) 使用默认比较器搜索整个已排序的 List(T) 中的元素,并返回元素的基于零的索引。
BinarySearch(T, IComparer(T)) 使用指定的比较器搜索整个已排序的 List(T) 中的元素,并返回元素的基于零的索引。
BinarySearch(Int32, Int32, T, IComparer(T)) 使用指定的比较器搜索已排序 List(T) 中的元素范围,并返回元素的基于零的索引。
Clear 从 List(T) 中移除所有元素。
Contains 确定 List(T) 中是否包含元素。
ConvertAll(TOutput) 将当前 List(T) 中的元素转换为另一种类型,并返回包含已转换元素的列表。
CopyTo(T[]) 将整个 List(T) 复制到兼容的一维数组中,从目标数组的开头开始。
CopyTo(T[], Int32) 将整个 List(T) 复制到兼容的一维数组中,从目标数组的指定索引开始。
CopyTo(Int32, T[], Int32, Int32) 将 List(T) 中的元素范围复制到兼容的一维数组中,从目标数组的指定索引开始。
Equals(Object) 确定指定的对象是否等于当前对象。(继承自 Object。)
Exists 确定 List(T) 是否包含与指定谓词定义的条件匹配的元素。
Finalize 允许对象尝试释放资源并在垃圾回收器回收它之前执行其他清理操作(继承自 Object)。
Find 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中的第一次出现。
FindAll 检索与指定谓词定义的条件匹配的所有元素。
FindIndex(Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中第一次出现的基于零的索引。
FindIndex(Int32, Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中从指定索引到最后一个元素的元素范围内第一次出现的基于零的索引。
FindIndex(Int32, Int32, Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中从指定索引开始并包含指定数量元素的元素范围内第一次出现的基于零的索引。
FindLast 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中的最后一次出现。
FindLastIndex(Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中最后一次出现的基于零的索引。
FindLastIndex(Int32, Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中从第一个元素到指定索引的元素范围内最后一次出现的基于零的索引。
FindLastIndex(Int32, Int32, Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中包含指定数量元素并以指定索引结束的元素范围内最后一次出现的基于零的索引。
ForEach 对 List(T) 的每个元素执行指定的动作。
GetEnumerator 返回一个迭代 List(T) 的枚举器。
GetHashCode 用作默认哈希函数。(继承自 Object。)
GetRange 创建源 List(T) 中元素范围的浅表副本。
GetType 获取当前实例的 Type。(继承自 Object。)
IndexOf(T) 搜索指定的对象并返回整个 List(T) 中第一次出现的基于零的索引。
IndexOf(T, Int32) 搜索指定的对象并返回 List(T) 中从指定索引到最后一个元素的元素范围内第一次出现的基于零的索引。
IndexOf(T, Int32, Int32) 搜索指定的对象并返回 List(T) 中从指定索引开始并包含指定数量元素的元素范围内第一次出现的基于零的索引。
Insert 在 List(T) 的指定索引处插入元素。
InsertRange 在 List(T) 的指定索引处插入集合的元素。
LastIndexOf(T) 搜索指定的对象并返回整个 List(T) 中最后一次出现的基于零的索引。
LastIndexOf(T, Int32) 搜索指定的对象并返回 List(T) 中从第一个元素到指定索引的元素范围内最后一次出现的基于零的索引。
LastIndexOf(T, Int32, Int32) 搜索指定的对象并返回 List(T) 中包含指定数量元素并以指定索引结束的元素范围内最后一次出现的基于零的索引。
MemberwiseClone 创建当前 Object 的浅表副本。(继承自 Object。)
Remove 从 List(T) 中移除特定对象的第一次出现。
RemoveAll 移除与指定谓词定义的条件匹配的所有元素。
RemoveAt 移除 List(T) 指定索引处的元素。
RemoveRange 从 List(T) 中移除一系列元素。
Reverse() 反转整个 List(T) 中元素的顺序。
Reverse(Int32, Int32) 反转指定范围内的元素顺序。
Sort() 使用默认比较器对整个 List(T) 中的元素进行排序。
Sort(Comparison(T)) 使用指定的 System.Comparison(T) 对整个 List(T) 中的元素进行排序。
Sort(IComparer(T)) 使用指定的比较器对整个 List(T) 中的元素进行排序。
Sort(Int32, Int32, IComparer(T)) 使用指定的比较器对 List(T) 中一系列元素进行排序。
ToArray 将 List(T) 的元素复制到一个新数组中。
ToString 返回表示当前对象的字符串。(继承自 Object。)
TrimExcess 如果该数字小于阈值,则将容量设置为 List(T) 中元素的实际数量。
TrueForAll 确定 List(T) 中的每个元素是否都与指定谓词定义的条件匹配。

示例

(* Creating a List *)
open System.Collections.Generic

let booksList = new List<string>()
booksList.Add("Gone with the Wind")
booksList.Add("Atlas Shrugged")
booksList.Add("Fountainhead")
booksList.Add("Thornbirds")
booksList.Add("Rebecca")
booksList.Add("Narnia")

printfn"Total %d books" booksList.Count
booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])
booksList.Insert(2, "Roots")

printfn("after inserting at index 2")
printfn"Total %d books" booksList.Count

booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])
booksList.RemoveAt(3)

printfn("after removing from index 3")
printfn"Total %d books" booksList.Count

booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])

编译并执行程序时,将产生以下输出:

Total 6 books
0: Gone with the Wind
1: Atlas Shrugged
2: Fountainhead
3: Thornbirds
4: Rebecca
5: Narnia
after inserting at index 2
Total 7 books
0: Gone with the Wind
1: Atlas Shrugged
2: Roots
3: Fountainhead
4: Thornbirds
5: Rebecca
6: Narnia
after removing from index 3
Total 6 books
0: Gone with the Wind
1: Atlas Shrugged
2: Roots
3: Thornbirds
4: Rebecca
5: Narnia
广告
© . All rights reserved.