سؤال

عند استيراد الأرقام من ملف CSV ، أحتاج إلى تحويلها إلى عوامات مع الوحدة.

حاليا أفعل هذا مع وظيفة مضمونة:

data |> List.map float |> List.map (fun n -> n * 1.0<m>)

لكنني أتساءل عما إذا كانت هناك طريقة أكثر أناقة للقيام بذلك - أو هل يجب علي إنشاء وحدة "وحدات" الخاصة بي مع وظائف التحويل؟

ما سيكون لطيفًا حقًا سيكون شيئًا كهذا ، لكنني أشك في أنه ممكن ...

data |> List.map float |> List.map lift<m>

هذا هو عكس سؤالي السابق (كيفية إزالة وحدات قياس F# بشكل عام).

تحديث: بالنسبة للوحدات محلية الصنع ، لقد جربت هذا ، والذي يعمل بشكل جيد:

[<Measure>]
type km = 
    static member lift (v:float) = v * 1.0<km>

data |> List.map float |> List.map km.lift

أو بعد السؤال في هذا الجواب

data |> List.map (float >> km.lift)
هل كانت مفيدة؟

المحلول

يبدو أن وحدات القياس لا يمكن أن تكون معلمات الكتابة في الوقت الحالي (لا توجد فكرة عما إذا كان هذا سيتغير). لذا فإن أقصر طريقة لكتابة هذا هي:

data |> List.map float |> List.map ((*) 1.0<m>)

تعديل

انظر أيضا الآن FloatWithMeasure هنا

http://msdn.microsoft.com/en-us/library/EE806527(VS.100).aspx

نصائح أخرى

هل هناك أي سبب يجعل عليك أن ترسم خريطة مرتين؟ ما المشكلة في ذلك:

data |> List.map (fun x -> (float x) * 1.0<m>)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top