Найти все строки, которые имеют подстроку элемента в другом списке строк
У меня есть следующий код.
let s1 = [(12, "abcde12345"); (23, "bcdef2345"); (12, "xyzafg3838")]
let s2 = ["bcd"; "345"]
Какой лучший способ найти все предметы в s1
у какого второго элемента есть подстрока любого из s2
?
(12, "abcde12345"); (23, "bcdef2345")
В моем реальном коде s1 является Seq
,
3 ответа
Решение
Я понял один.
s1 |> Seq.filter (fun i -> List.exists (fun e -> (snd i).Contains(e)) s2)
Объедините все элементы из второго набора в регулярное выражение, затем примените его к каждому элементу в первом наборе.
open System
open System.Text.RegularExpressions
let setA = [ "One"; "Two"; "Three" ]
let setB = [ "o"; "n" ];
let pattern = String.Join("|", setB);
let regex = new Regex(pattern);
let results = setA |> List.filter (fun str -> regex.Match(str).Success)
results |> List.iter (fun result -> Console.WriteLine(result))