2010-11-04 57 views

回答

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

您可以使用Enumerable.All

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

你能做到這一點的LINQ ...

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

這使用the LINQ All method,該「決定序列中的所有元素是否滿足條件。」在這種情況下,集合的元素是字符,條件是該字符等於問號字符。

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

剛跑的比較:

這種方式堆X比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(); 
     } 

字符串方式11 LINQ的方式4189

+1

你不測試他們不相等的情況 - 這是一個不公平的測試。您只是在查看「所有」的最壞情況情況 – 2010-11-04 01:09:31

+1

請 - 我很樂意爲您解決此問題。只要讓測試更好,並將結果放入 – 2010-11-04 01:29:54

+0

@Reed,你會發現負面檢查? 「全部」在第一個不匹配的元素上失敗。 – greenoldman 2010-11-04 07:02:41

4

這麼多快linq的答案!我們不能再以傳統方式做任何事情嗎? 這比linq解決方案快了一個數量級。更可讀?也許不是,但那是方法名稱的用途。

static bool IsAllQuestionMarks(String s) { 

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

     return true; 
    } 
3

不是很可讀......但regular expression是另一種方式來做到這一點(和它的快):

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

定義速度很快,因爲我認爲這並不比linq解決方案快,但沒有可讀性。 – MarkPflug 2010-11-04 18:01:22

+1

定義:足夠快。我沒有比較正則表達式和linq,我只是展示了一種替代方法。我並不確定linq的可讀性更高 - 或者你說linq是一個函數monadic-dsl比正則表達式更容易理解......? :-)對我來說,它們都具有相似的特徵:易於編寫,寫完後不容易理解。 – rsenna 2010-11-04 19:14:18

0

你也可以試試這個:

private bool CheckIfStringContainsOnlyQuestionMark(string value) 
{ 
    return !value.Where(a => a != '?').Select(a => true).FirstOrDefault(); 
} 
相關問題