कोड पर एक नज़र डालें:क्वेरी परिणाम में एक वर्ण क्यों गुम है?
string expression = "x & ~y -> (s + t) & z";
var exprCharsNoWhitespace = expression.Except(new[]{' ', '\t'}).ToList();
var exprCharsNoWhitespace_2 = expression.Replace(" ", "").Replace("\t", "").ToList();
// output for examination
Console.WriteLine(exprCharsNoWhitespace.Aggregate("", (a,x) => a+x));
Console.WriteLine(exprCharsNoWhitespace_2.Aggregate("", (a,x) => a+x));
// Output:
// x&~y->(s+t)z
// x&~y->(s+t)&z
मैं मूल स्ट्रिंग से सभी सफेद स्थान को निकालना और फिर अलग-अलग पात्रों प्राप्त करना चाहते हैं। परिणाम मुझे surprized। परिवर्तनीय exprCharsNoWhitespace में अपेक्षित, कोई सफेद जगह नहीं है, लेकिन अप्रत्याशित रूप से, केवल लगभग अन्य सभी वर्ण शामिल हैं। '&' का आखिरी मौका गायब है, सूची की गणना 12 है। जबकि exprCharsNoWhitespace_2 पूरी तरह से अपेक्षित है: गणना 13 है, व्हाइटस्पेस के अलावा अन्य सभी वर्ण निहित हैं।
उपयोग किया गया ढांचा .NET 4.0 था। मैंने इसे csharppad (वेब-आधारित आईडीई/कंपाइलर) पर भी चिपकाया और उसी परिणाम प्राप्त किए।
ऐसा क्यों होता है?
संपादित: Allright, मैं अनजान था कि है के अलावा, के रूप में रयान ओ'हारा, एक सेट आपरेशन द्वारा बताया। मैंने पहले इसका इस्तेमाल नहीं किया था।
// So I'll continue just using something like this:
expression.Where(c => c!=' ' && c!='\t')
// or for more characters this can be shorter:
expression.Where(c => ! new[]{'a', 'b', 'c', 'd'}.Contains(c)).
डी 'ओह! मैं इस विधि के पहलू से अनजान था। – user1847129
वाह, यह भयानक नामकरण है। मैंने कभी इसकी उम्मीद नहीं की होगी। – Mehrdad
@ मेहरदाद - मैं उत्सुक हूं कि आप नामकरण को ठीक करने के लिए क्या करेंगे? संख्यात्मक में कई "सेट-आधारित" विधियां हैं और वे परंपरागत सेट शब्दावली का उपयोग करते हैं - अंतर, संघ, छोड़कर। –