我有一个元组列表:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then AutoDropdown 'if a value is changed on Column 3/ Column C then call the name of the above subroutine, in this case it is called AutoDropdown
End Sub
我想在一些条件下创建一个返回bool的函数:两个int都必须大于0,列表中的字符串必须是不同的。
到目前为止,我有:
(string * (int * int)) list
let st = [("a1",(100,10)); ("a2",(50,20)); ("a3",(25,40))]
但是我无法弄清楚如何找出列表中的所有字符串是否都是不同的。任何提示?
答案 0 :(得分:6)
使用distinctBy
:
let inv st =
List.length (List.distinctBy fst st) = List.length st && List.forall (fun (a,(n,p)) -> n>0 && p>0) st
或者您可以在一个管道中组合两个检查:
let inv st =
st
|> List.filter (fun (_,(n,p)) -> n>0 && p>0)
|> List.distinctBy fst
|> List.length
|> (=) (List.length st)
答案 1 :(得分:1)
最简单的方法是编译所有不同字符串的列表(通过List.distinct
),看看它是否与原始列表的大小相同:
let allDistinctStirngs = st |> List.map fst |> List.distinct
let allStringsAreDistinct = List.length st = List.length allDistinctStrings