2010-11-04 45 views

Trả lời

15
var isAllQuestionMarks = input.All(c => c == '?'); 
21

Bạn có thể sử dụng Enumerable.All:

bool isAllQuestion = input.All(c => c=='?'); 
2

bạn có thể làm điều đó trong LINQ ...

bool result = input.ToCharArray().All(c => c=='?'); 
3
bool allQuestionMarks = input.All(c => c == '?'); 

này sử dụng the LINQ All method, mà "xác định liệu tất cả các yếu tố của một chuỗi đáp ứng một điều kiện." Trong trường hợp này, các phần tử của bộ sưu tập là các ký tự và điều kiện là ký tự bằng ký tự dấu chấm hỏi.

6
 string = "????????"; 
     bool allQuestionMarks = input == new string('?', input.Length); 

Chỉ cần chạy một so sánh:

cách này là đống x nhanh hơn so với input.All(c => c=='?');

public static void Main() { 
      Stopwatch w = new Stopwatch(); 
      string input = "????????"; 
      w.Start(); 
      bool allQuestionMarks; 
      for (int i = 0; i < 10; ++i) { 
       allQuestionMarks = input == new string('?', input.Length); 
      } 
      w.Stop(); 
      Console.WriteLine("String way {0}", w.ElapsedTicks); 


      w.Reset(); 
      w.Start(); 
      for (int i = 0; i < 10; ++i) { 
       allQuestionMarks = input.All(c => c=='?'); 
      } 
      Console.WriteLine(" Linq way {0}", w.ElapsedTicks); 
      Console.ReadKey(); 
     } 

Chuỗi cách 11 LINQ cách 4189

+1

Bạn không kiểm tra các trường hợp chúng KHÔNG bằng nhau - đó là một thử thách không công bằng. Bạn chỉ đang kiểm tra kịch bản trường hợp xấu nhất cho "Tất cả" –

+1

Xin vui lòng - Tôi rất vui khi bạn sửa nó. Chỉ cần thực hiện bài kiểm tra tốt hơn và đưa kết quả vào –

+0

@Reed, bạn thấy kiểm tra tiêu cực ở đâu? "Tất cả" không thành công trên phần tử không khớp đầu tiên. – greenoldman

4

Vì vậy, nhiều LINQ câu trả lời! Chúng ta không thể làm bất cứ điều gì theo cách cổ xưa nữa? Đây là thứ tự độ lớn nhanh hơn dung dịch linq. Dễ đọc hơn? Có lẽ không, nhưng đó là những gì tên phương pháp được cho.

static bool IsAllQuestionMarks(String s) { 

     for(int i = 0; i < s.Length; i++) 
      if(s[i] != '?') 
       return false; 

     return true; 
    } 
3

Không rất có thể đọc được ... Nhưng một regular expression là một cách khác để làm điều đó (và nó nhanh):

// Looking for a string composed only by one or more "?": 
bool allQuestionMarks = Regex.IsMatch(input, "^\?+$"); 
+0

Xác định nhanh, bởi vì tôi nghĩ rằng điều này không nhanh hơn giải pháp LINQ, nhưng không có khả năng đọc. – MarkPflug

+1

Định nghĩa: đủ nhanh. Tôi không so sánh regex với LINQ, tôi chỉ hiển thị một cách khác. Tôi không chắc chắn rằng linq là dễ đọc hơn mặc dù - hoặc bạn đang nói rằng LINQ, một chức năng-monadic-dsl, là dễ hiểu hơn một biểu thức chính quy ...? :-) Với tôi cả hai đều có những đặc điểm tương tự nhau: dễ viết, không dễ hiểu sau khi bạn viết nó. – rsenna

0

Bạn cũng có thể thử điều này:

private bool CheckIfStringContainsOnlyQuestionMark(string value) 
{ 
    return !value.Where(a => a != '?').Select(a => true).FirstOrDefault(); 
} 
Các vấn đề liên quan