(string, int)
formunun bir dizi listesi var. Listede arama yapmaya ve dize bileşeni parametreyle eşleşen tuple döndürmeye çalışıyorum: let find_tuple string_name tuples_list =
Bunu nasıl yapabilirim? Kafamı etrafına dolamıyorum. (string, _) ->...
gibi eşleşen sözdizimini kullanmanın bir yolu var mı?Bir öğenin tuples listesiyle eşleşmesi
8
A
cevap
7
Sen
let rec find_tuple string_name tuples_list =
match tuples_list with
[] -> raise Not_found
|(s, i)::tl -> if s = string_name then (s, i)
else find_tuple string_name tl
veya basitçe
List.find (fun s -> fst s = string_name) tuples_list
1
Evet, böyle sözdizimi eşleşen kullanırım şöyle bunu başarabilirsiniz, ancak maç korumaları gerekir (veya başka ardından eğer kullanabilirsiniz) . List
modülünde, bir yüklemeyle eşleşen ilk öğeyi döndürecek find
adlı bir işlev bulunur. Ayrıca, yüklemeyle eşleşen tüm öğelerin listesini döndüren filter
(ve find_all
- aynı işlev) işlevine de sahiptir.
let predicate string_name tuple = match tuple with (s, _) when s = string_name -> true
| _ false
try
let x = List.find (predicate "query") tuples_list in
...
with Not_found -> ...
DÜZENLEME: daha iyi bir yüklem: Örneğin
: daha iyi bir çözüm dizilerini listelerde çalışırList.assoc
kullanmak, ve anahtar değeri çifti olmak üzere dizilerini dikkate Ancak
let predicate string_name (s, _) = s = string_name
try
let x = List.assoc "query" tuples_list in ...
with Not_found -> ...
List.assoc
dönüş değeri başlığın ikinci öğesi (sizin durumunuzda bir int
) olmasına rağmen. Eğer tupenin değerini istiyorsanız, ya yeniden oluşturun ya da ilk yaklaşımı kullanın.
İlgili konular
- 1. Bir listeye tuples ekleme
- 2. Ruby'de Tuples Kullanımı?
- 3. Listeler listesiyle tekrarlamak mı?
- 4. Python min işlevi nesnelerin bir listesiyle
- 5. Sütun adlarının bir listesiyle toplama nasıl yapılır
- 6. 'indexOf', '(ChecklistItem)' türünde bir argüman listesiyle başlatılamıyor '
- 7. Listelerin sözlüğünü tuples sözlüğüne dönüştürün
- 8. Artırma yeni tuples girilen değer,
- 9. Sayısal listeyi tuple listesiyle eşitleme
- 10. Nesnelerin listesiyle veri ızgarası oluşturuluyor
- 11. Automapper eşleme özelliği beklenmedik şekilde kısmi özellik adı eşleşmesi eşleşmesi
- 12. Desen eşleşmesi ve RDD'ler
- 13. C++ 11 Regex Eşleşmesi
- 14. querySelector, joker karakter eşleşmesi?
- 15. dize eşleşmesi sorgusu
- 16. Bir öğenin outerHTML'i, başka bir öğenin içeriği olarak nasıl görüntülenir?
- 17. Bir öğenin başka bir öğenin üzerine nasıl konumlandırılacağı?
- 18. Listedeki bir öğenin java
- 19. Bir öğenin CasperJS
- 20. Bir öğenin DEQUE
- 21. Bir öğenin değerinin
- 22. Bir öğenin genişliğini, yüzde
- 23. Bir öğenin içeriğini jQuery
- 24. Bir öğenin öğesinin ListView
- 25. C# İçindeki bir nesne listesiyle bir nesneyi seri hale getirin
- 26. Herhangi bir sayıda sözcükten sonra Regex eşleşmesi
- 27. Sözlük için Tuples listesi (C#) en kısa yoldan dönüştürmek için Tuples 'in Sözlük
- 28. C++ 0x Tuples Elements Öğeleri Geriye doğru
- 29. Böyle 2-dizilerini listesi var 2-Tuples
- 30. coffeescript python'da "tuples" gibi nasıl açılacaksınız
Bazı şeyleri basitleştirmek için '' '' anahtar sözcüğünü kullanabilirsiniz: '| ((s, i) olarak h) :: tl -> eğer ... o zaman h ... 'Ayrıca,' fst' işlevi hakkında bilmiyordum, bunu işaret ettiğin için teşekkürler! –
İkinci seçenek, OP'nin aranan '(string, _) 'i içeren' List.find (fun (string, _) -> string = string_name) tuples_list' olarak da yazılabilir. – sepp2k
Teşekkürler! Bir 'rec rec' ile mükemmel çalıştı. – yavoh