Tôi có một chuỗi các chuỗi có độ dài thay đổi. Hiện tại tôi có một vòng lặp lặp qua mảng để tìm chuỗi dài nhất trong mảng. Có cách nào tôi có thể sử dụng LINQ để viết nó theo cách hiệu quả hơn và/hoặc sạch hơn?cách tìm chuỗi dài nhất trong một chuỗi [] bằng cách sử dụng LINQ
Trả lời
Nó sẽ không được hiệu quả hơn, tuy nhiên nó sẽ là một chút bụi để làm điều gì đó như:
var strings = new string[] { "1", "02", "003", "0004", "00005" };
string longest = strings.OrderByDescending(s => s.Length).First();
Output: 00005
string [] strings;
return strings.OrderByDescending (s => s.Length).First();
string[] arr = new string[] { "a", "aa", "aaa" };
var longest = arr.Where(s => s.Length == arr.Max(m => m.Length)).First();
đầu ra aaa
Bằng cách này, mã rõ ràng sẽ giúp bạn nhận được chuỗi có độ dài tối đa.
điều này chắc chắn hoạt động. Nhưng nó là của O (N^2), do đó, nó sẽ mất lâu hơn một chút so với câu trả lời khác. Ví dụ: trên chuỗi chuỗi 5000 'strings.OrderByDescending (s => s.Length). Đầu tiên();' sẽ trả lại trong khoảng 15 CPU tick trên máy tính của tôi, trong khi điều này sẽ mất khoảng 390. ve. – vrrathod
Vâng, tôi nhận ra điều này. Tôi đặt nó lên bởi vì nó nói những gì nó đang làm, thay vì sử dụng một tác dụng phụ của trật tự. –
Tôi không có trình biên dịch ngay bây giờ nhưng điều này cũng sẽ hoạt động.
string[] arr = new string[] { "a", "aa", "aaa" };
var longest = arr.Max(w => w.Length)
Điều này tìm thấy độ dài lớn nhất nhưng không tìm thấy chính chuỗi đó. – Vache
strings.Aggregate(string.Empty, (seed, f) => f.Length > seed.Length ? f : seed);
cú pháp tổng hợp là hơi khó đọc hơn so với các phương pháp khác, nhưng nói đúng nó hiệu quả hơn các phương pháp khác mà tôi thấy ở đây vì nó không đòi hỏi phân loại. Chỉ cần thực hiện O (N).
EDIT: Cách tiếp cận này, cùng với hầu hết những người khác ở đây giả định không có giá trị null trong danh sách của bạn, vì sợ rằng f.Length ném một ngoại lệ ref rỗng. Một toán tử ternary nhanh (f! = Null? F.Length: 0) sẽ sửa chữa nếu nó là hợp lệ cho số đếm của bạn.
Tôi thích câu trả lời này vì nó thực sự trả lời câu hỏi * và * tôi tin rằng nó là hiệu quả nhất cho một câu trả lời mục đơn lẻ khi không cần danh sách toàn bộ các từ dài nhất * và * với chỉnh sửa bổ sung, Caleb đề cập đến xử lý null dây quá. Hai ngón tay cái lên từ tôi! Để thuận tiện: đây là mã tôi đã thử nghiệm hoạt động tốt: 'string longest = strings.Aggregate (chuỗi.Rỗng, (hạt giống, f) => (f == null? 0: f.Length)> seed.Length? f: hạt giống); ' –
Mặc dù đây là câu hỏi cũ tôi muốn thêm rằng câu trả lời hiệu quả nhất không được cung cấp. Nó không phải là một lớp lót, nhưng nó là nhanh nhất và trả về một tập hợp các chuỗi dài nhất, mà OrderBy hoặc Tổng hợp không cung cấp. Matt Ellen là người gần gũi nhất với câu trả lời của anh ta, nhưng sử dụng Max trong phạm vi của anh ta làm cho nó khá chậm khi bạn đang làm việc với một bộ sưu tập lớn.
Câu trả lời đúng nên là:
int maxLength = collection.Max(x => x.Length);
string[] longestStrings = collection.Where(x => x.Length == maxLength);
Cân nhắc sử dụng?. (trong C# 6.0) và ?? các toán tử để kiểm tra các giá trị null nếu bộ sưu tập của bạn có thể chứa các giá trị này.
chỉnh sửa: câu hỏi yêu cầu một chuỗi không phải là danh sách các chuỗi dài nhất. mã của bạn cũng cần một '.ToArray() 'trước dấu chấm phẩy cuối cùng để biên dịch. Nhưng tôi khen ngợi bạn về việc cung cấp mã có thể dễ dàng được sử dụng để cung cấp danh sách các từ dài nhất hoặc chỉ từ đầu tiên, với '.FirstOrDefault()' đơn giản so với '.ToArray()' ở cuối mã của bạn . Cá nhân tôi thích sự linh hoạt của giải pháp này, vì vậy tôi giống như những gì giải pháp của bạn cung cấp. Cảm ơn! –
- 1. Chia chuỗi thành danh sách các chuỗi có độ dài bằng cách sử dụng LINQ
- 2. Tìm một chuỗi trong chuỗi dài hơn
- 3. Làm cách nào để tìm chuỗi dài nhất trong Python?
- 4. Tìm chuỗi con lặp lại dài nhất trong JavaScript bằng cách sử dụng cụm từ thông dụng
- 5. Cách tìm chiều dài của một chuỗi trong R?
- 6. Tìm dài nhất không giảm chuỗi
- 7. Cách tìm chuỗi ngắn nhất trong danh sách bằng Python
- 8. Cách nhanh nhất để tìm chuỗi bằng chuỗi con trong SQL?
- 9. Làm cách nào để tìm chuỗi con dài nhất bằng cây?
- 10. Tìm biên giới dài nhất của một chuỗi
- 11. cách tìm tên chuỗi sử dụng vba?
- 12. Tìm chuỗi lặp đi lặp lại dài nhất trong một chuỗi
- 13. tìm chiều dài của chuỗi số liên tiếp dài nhất
- 14. Tách chuỗi bằng cách sử dụng dấu cách cách nhau và độ dài tối đa
- 15. cách xóa một phần chuỗi trong chuỗi bằng cách sử dụng jquery
- 16. Cách thanh lịch nhất để truy vấn chuỗi XML bằng cách sử dụng XPath
- 17. Chuỗi dài nhất trong mảng object_ gumpy
- 18. Chuỗi để nổi bằng cách sử dụng chuỗi
- 19. C# - Cách nhanh nhất để tìm một tập hợp các chuỗi trong một chuỗi khác
- 20. Cách tốt nhất để lưu trữ các chuỗi dài
- 21. tìm ra "chuỗi dài" của một int
- 22. Cách tìm chuỗi trong một mảng bằng PHP?
- 23. cách tìm chiều dài chuỗi sử dụng strlen trong mục tiêu c
- 24. Tách chuỗi bằng LINQ
- 25. Cách tốt nhất để so sánh hai danh sách chuỗi lớn, sử dụng C# và LINQ?
- 26. chia chuỗi bằng cách sử dụng javascript
- 27. Chuỗi con chung dài nhất từ hơn hai chuỗi - Python
- 28. Excel: Tìm kiếm danh sách các chuỗi trong một chuỗi cụ thể bằng cách sử dụng các công thức mảng?
- 29. cách tìm trước và sau chuỗi con trong một chuỗi
- 30. Tìm kiếm các chuỗi bằng cách sử dụng cụm từ thông dụng trong Python
tuyệt vời! cảm ơn, tôi đã sử dụng FirstOrDefault(). Nó chắc chắn trông sạch hơn, nhưng có lợi thế về mặt hiệu suất? – vrrathod
@vrrathod Không có hiệu suất đạt được, nó vẫn làm logic lặp đi lặp lại bạn đã có, nó chỉ là một cú pháp ngắn gọn hơn, đó là những gì LINQ là tất cả về. –
Nó chắc chắn làm điều tương tự. Đây là cách tôi thử nghiệm. Tôi đã tạo một chuỗi gồm 5000 chuỗi. LINQ mất khoảng 15 cpu ve trên máy tính của tôi. Tôi đã viết một vòng lặp thời trang cũ so sánh độ dài của chuỗi. Nó trả về 0 lần. Khác biệt tôi đoán là để phân loại. – vrrathod