2015-03-27 11 views
5

Tôi cần có cấu trúc dữ liệu cho các mục sau:Cách xác định cấu trúc dữ liệu thích hợp cho một bộ tham số

Trong thiết bị có khe cắm bộ nhớ, mỗi khe có một bộ thông số. Các tham số này có các loại khác nhau. Danh sách các tham số có thể là cố định, vì vậy không cần sự linh hoạt chung chung la »Hỗ trợ các tham số tùy ý mà không thay đổi«. Ngoài ra, đối với mỗi tham số, cấu trúc của nội dung được biết. Các trường hợp sử dụng điển hình là truy xuất và sửa đổi một tham số cụ thể cũng như việc chuyển đổi tham số hoàn chỉnh được đặt thành một cấu trúc dữ liệu khác (nhưng đã được xác định).

Sự lựa chọn tự nhiên của F cấu trúC# dữ liệu sẽ là một loại tổng hợp như thế này:

type SomeParameterContentType = { Field1 : string, Field2 : int } 
type SomeOtherParameterContentType = { Other1 : bool option, Other2 : double } 

type Parameter = 
    | SomeParameter of SomeParameterContentType 
    | SomeOtherParameter of SomeOtherParameterContentType 

Bằng cách này tôi có thể tạo ra một tập hợp và lưu trữ các thông số đó với một cấu trúc dữ liệu rất tốt đẹp. Câu hỏi đặt ra ở đây là: Với ý tưởng này, làm cách nào để tìm kiếm một tham số cụ thể như thế nào? Tôi không biết cách nào để chỉ định một vị từ cho hàm tìm kiếm cho các tập hợp. Nó sẽ có thể xác định một loại tổng hợp danh sách chỉ các loại tham số mà không có nội dung của họ bằng cách sử dụng này như là chìa khóa cho một từ điển nhưng tôi không thích ý tưởng này quá nhiều. Việc sử dụng các chuỗi thay vì loại tổng thứ hai không làm cho mọi việc tốt hơn vì nó vẫn yêu cầu cung cấp danh sách các tham số có thể hai lần.

Có ai có ý tưởng hay hơn không?

Thx - Đa số.

+0

Tôi nghĩ rằng ý tưởng này là một trong những quyền - nhưng tôi không có được những gì bạn đang tìm kiếm. Bạn có thể sẽ có một 'List ' để làm việc với và chỉ có thể sử dụng ['List.tryFind'] (https://msdn.microsoft.com/de-de/library/ee353506.aspx) với một cái gì đó giống như' function (SomeParameter {Field1 = "find"; Field2 = _}) -> true | _ -> sai'? – Carsten

+0

@Carsten König: Các tham số sẽ được lưu trữ trong một danh sách (hoặc thiết lập, cho rằng vấn đề) và tôi muốn lấy một trong các tham số từ danh sách và đọc các giá trị của nó (vì vậy tôi không biết chúng). Vì vậy, một cái gì đó như 'tryFind (function (SomeParameter _) -> true | _ -> false)' có thể là một giải pháp. Tôi sẽ kết thúc với một danh sách các hàm vị ngữ 'cho phép someParameterPredicate = function (SomeParameter _) -> true | _ -> false' và sau đó có thể sử dụng 'tryFind someParameterPredicate'. Hơi cồng kềnh vẫn còn nhưng doable và loại an toàn. Hấp dẫn! –

+0

nếu bạn muốn chọn phần bạn có thể sử dụng ['List.tryPick'] (https://msdn.microsoft.com/de-de/library/ee353814.aspx) (hoặc' List.pick') - nhưng có bạn sẽ cần những chức năng đó.Nếu điều này là nhiều, bạn luôn có thể đi theo con đường OOP và sử dụng giao diện hoặc từ điển – Carsten

Trả lời

0

Âm thanh như tất cả các bạn muốn là một tryFind cho một Set:

module Set = 

    let tryFind p = 
    Set.toList >> List.tryFind p 

Cách sử dụng:

let mySet = Set.ofList [1;2;3;4;5] 
let m = mySet |> Set.tryFind (fun t -> t = 2) 

val m: int tùy chọn = Một số 2

sử dụng cho phép Loại của bạn:

let yourSet = Set.ofList [SomeParameter {Field1="hello";Field2=3}] 
let mYours = yourSet |> Set.tryFind (fun t -> match t with 
               |SomeParameter p -> true 
               |SomeOtherParameter p -> false) 

val mYours: Tùy chọn tham số = Một số (SomeParameter {Field1 = "hello"; Field2 = 3;})

Các vấn đề liên quan