الحصول على عضو محدد في F # الصفوف (tuple)
سؤال
في 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)