Được cung cấp một chuỗi các chữ số, tôi muốn có một chuỗi các tuple ánh xạ các ký tự khác 0 với vị trí của chúng trong chuỗi. Ví dụ:Có chức năng thư viện hoặc toán tử nào để tạo một bộ tuple không?
IN: "000140201"
OUT: { (3, '1'); (4, '4'); (6, '2'); (8, '1') }
Giải pháp:
let tuples = source
|> Seq.mapi (fun i -> fun c -> (i, c))
|> Seq.filter (snd >> (<>) '0')
Nó có vẻ như (fun i -> fun c -> (i, c))
là rất nhiều đánh máy hơn so với nó nên được cho một thao tác đơn giản và có lẽ phổ biến như vậy. Thật dễ dàng để khai báo các chức năng cần thiết:
let makeTuple a b = (a, b)
let tuples2 = source
|> Seq.mapi makeTuple
|> Seq.filter (snd >> (<>) '0')
Nhưng có vẻ như với tôi rằng nếu thư viện cung cấp các snd
chức năng, nó cũng nên cung cấp các makeTuple
chức năng (và có lẽ với một tên ngắn hơn), hoặc ít nhất là nó nên tương đối dễ soạn. Tôi không thể tìm thấy nó; tui bỏ lỡ điều gì vậy? Tôi đã cố gắng để xây dựng một cái gì đó với Tuple.Create của khung công tác, nhưng tôi không thể tìm ra cách để có được bất cứ thứ gì khác ngoài sự quá tải một đối số.
Cải tiến nhỏ 'Seq.mapi (vui vẻ ab -> a, b)' –
@JohnPalmer ah, cảm ơn.Tôi nghĩ rằng tôi đã có một lỗi với cú pháp đó trước đó, nhưng tôi cho rằng lỗi đã được gây ra bởi cái gì khác. – phoog
Ngoài ra, '||>' là đảo ngược của toán tử mà bạn muốn. –