我目前在查找二维数组中特定元素的索引时遇到一些问题。我知道标准数组可以使用 findIndex ,如下所示。
let wantedElemented = 5
let index = Array.findIndex(fun x -> x = wantedElemented) array
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何将其应用于二维数组(矩形)。有没有比迭代整个数组比较每个元素更有效的方法?
for row in 0 .. max do
for col in 0 .. max do
if array.[row,col] = wantedElement then
let index = (row,col)
index
else (-1,-1)
Run Code Online (Sandbox Code Playgroud)
如果我确实必须迭代整个数组,我将如何在不使用选项类型的情况下处理 else 条件
我现在对F#感兴趣,因为它与我以前用过的所有东西都不一样.我需要访问大型列表中包含的每个列表的第一个元素.如果我假设主列表包含"x"列表本身包含5个元素,那么访问每个第一个元素的最简单方法是什么.
let listOfLists = [[1; 2; 3; 4; 5]; [6; 7; 8; 9; 10]; [11; 12; 13; 14; 15]]
我想要的输出将是一个包含[1; 6; 11]的新列表
目前我有
let rec firstElements list =
match list with
| list[head::tail] ->
match head with
| [head::tail] -> 1st @ head then firstElements tail
Run Code Online (Sandbox Code Playgroud)
然后扩展它,我将如何获得所有第二个元素?是否最好在没有第一个元素的情况下创建新列表(通过使用类似函数删除它们)然后重用相同的函数?
我的问题是关于 F# 中的列表过滤。是否有一个内置函数允许过滤列表,仅返回不满足条件的列表?
let listOfList = [ [1;2;3;4;5]; [6;7;8;9;10]; [11;2;5;14;1] ]
let neededValue = 1
Run Code Online (Sandbox Code Playgroud)
我知道 F# 具有 List.Contains() 但我只想返回不满足条件的列表。
let sortedLists = listOfList |> List.filter(fun x -> x <> x.Contains(neededValue)
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,因为在这种情况下,我将列表与列表是否包含特定值进行比较。我该怎么做?在这种情况下我想要的输出是:
sortedLists = [ [6;7;8;9;10] ]
Run Code Online (Sandbox Code Playgroud)