Câu hỏi này đến từ một người đang thực hiện chuyển đổi từ R sang F #. Tôi hoàn toàn thừa nhận cách tiếp cận của tôi ở đây có thể sai nên tôi đang tìm cách F # để làm điều này. Tôi có một tình huống mà tôi muốn lặp qua một tập hợp các tập tin XML, phân tích cú pháp chúng, và trích xuất một số giá trị để xác định những giá trị nào cần xử lý thêm. Độ nghiêng tự nhiên của tôi là Bản đồ trên mảng dữ liệu XML, exampleData
trong trường hợp này, phân tích cú pháp từng loại bằng cách sử dụng nhà cung cấp loại RawDataProvider
và cuối cùng tạo đối tượng Bản đồ cho mỗi tệp chứa XML được phân tích cú pháp, giá trị Trạng thái từ XML và ItemId giá trị.Loại bộ sưu tập F # cho các loại hỗn hợp
Chỉ ra rằng loại Bản đồ trong F # không giống như Danh sách trong R. Danh sách trong R về cơ bản là các hashmaps có thể hỗ trợ có các loại hỗn hợp. Dường như loại Bản đồ trong F # không hỗ trợ lưu trữ các loại hỗn hợp. Tôi đã tìm thấy điều này là vô cùng hữu ích trong công việc R của tôi và đang tìm kiếm những gì bộ sưu tập F # phù hợp cho việc này.
Hoặc, tôi có nghĩ về điều này không? Đây là một cách rất tự nhiên cho tôi để xử lý dữ liệu trong R vì vậy tôi mong đợi sẽ có một cách để làm điều đó trong F # là tốt. Giả thiết là tôi sẽ phân tích sâu hơn và thêm các phần tử dữ liệu bổ sung vào các bộ sưu tập này.
Cập nhật: Điều này có vẻ giống như một trường hợp sử dụng đơn giản như rằng phải có một cách thành ngữ để làm điều này trong F # mà không cần phải định nghĩa một kiểu ghi cho mỗi bước của phân tích. Tôi đã cập nhật ví dụ của mình để minh họa thêm những gì tôi đang cố gắng làm. Tôi muốn trở một mảng của các đối tượng đồ mà tôi đã phân tích:
type RawDataProvider = XmlProvider<"""<product Status="Good" ItemId="123" />""">
let exampleData = [| """<product Status="Good" ItemId="123" />"""; """<product Status="Bad" ItemId="456" />"""; """<product Status="Good" ItemId="789" />"""|]
let dataResult =
exampleData
|> Array.map(fun fileData -> RawDataProvider.Parse(fileData))
|> Array.map(fun xml -> Map.empty.Add("xml", xml).Add("Status", xml.Status).Add("ItemId", xml.ItemId))
|> Array.map(fun elem -> elem.["calc1Value"] = calc1 elem["itemId"])
|> Array.map(fun elem -> elem.["calc2"] = calc2 elem.["ItemId"] elem.["calc1Value"])
Không phải những gì bạn đã hỏi, nhưng tôi nghĩ 'File.ReadAllLines (file) |> Array.reduce (+)' có thể được thay thế bằng 'File.ReadAllText (file)' – CoderDennis
@CoderDennis cảm ơn thông tin –
Bạn nên sử dụng loại bản ghi thay vì băm được nhập sai. –