سؤال

في F # رمز لدي الصفوف (tuple):

let myWife=("Tijana",32)

وأريد الوصول إلى كل عضو من أعضاء الصفوف (tuple) بشكل منفصل. على سبيل المثال هذا ما أريد تحقيقه من قبل لا أستطيع

Console.WriteLine("My wife is {0} and her age is {1}",myWife[0],myWife[1])

وهذا الرمز لا تعمل الواضح، من خلال أعتقد يمكنك جمع ما تريد تحقيقه.

هل كانت مفيدة؟

المحلول

وترغب في منع زوجتك من الشيخوخة عن طريق سنها غير قابل للتغيير؟ :)

لفي الصفوف (tuple) الذي يحتوي على اثنين فقط من الاعضاء، يمكنك fst وsnd لاستخراج أعضاء الزوج.

let wifeName = fst myWife;
let wifeAge = snd myWife;

لالصفوف أطول، سيكون لديك لفك الصفوف (tuple) إلى متغيرات أخرى. على سبيل المثال،

let _, age = myWife;;
let name, age = myWife;;

نصائح أخرى

وشيء آخر مفيد جدا هو أن مطابقة النقش (تماما مثل عند استخراج العناصر باستخدام "السماح" ملزم) يمكن استخدامها في حالات أخرى، على سبيل المثال عند كتابة الدالة:

let writePerson1 person =
  let name, age = person
  printfn "name = %s, age = %d" name age

// instead of deconstructing the tuple using 'let', 
// we can do it in the declaration of parameters
let writePerson2 (name, age) = 
  printfn "name = %s, age = %d" name age

// in both cases, the call is the same
writePerson1 ("Joe", 20)
writePerson2 ("Joe", 20)

ويمكنك استخدام FST وظيفة للحصول على العنصر الأول، وSND للحصول على ekement الثانية. يمكنك أيضا كتابة وظيفة بنفسك 'الثالثة':

let third (_, _, c) = c

اقرأ المزيد هنا: إشارة F # اللغة، التيوبل

ويمكنك أيضا كتابة وظيفة فك لمدة معينة:

let unpack4 tup4 ind =
    match ind, tup4 with
    | 0, (a,_,_,_) -> a
    | 1, (_,b,_,_) -> b
    | 2, (_,_,c,_) -> c
    | 3, (_,_,_,d) -> d
    | _, _ -> failwith (sprintf "Trying to access item %i of tuple with 4 entries." ind) 

أو

let unpack4 tup4 ind =
    let (a, b, c, d) = tup4
    match ind with
    | 0 -> a
    | 1 -> b
    | 2 -> c
    | 3 -> d
    | _ -> failwith (sprintf "Trying to access item %i of tuple with 4 entries." ind) 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top