2010-07-02 7 views
5

मैं सी # में स्ट्रिंग की एक सूची के लिए एक सूची कनवर्ट करते हैं, और अद्वितीय अक्षर हैं जो सूची में तार में हैं, LINQ का उपयोग कर की एक सूची बनाना चाहते हैं। सी # में LINQ का उपयोग कर एक सूची <char>

मैं अब तक बाहर काम किया है कि कैसे एक सूची में सूची चालू करने के लिए, लेकिन मैं बाहर काम नहीं कर सकते कि LINQ उस से आगे जाने के लिए मिलता है।

इस प्रकार है क्या मैं अब तक राशि है:

List<string> dictionary = new List<string>(someArray); 
List<string[]> uniqueCharacters = dictionary.ConvertAll(s => s.Split()); 

मेरा मानना ​​है कि मैं

List<char> uniqueCharacters = 
    dictionary.ConvertAll(s => s.Split()).SelectAll(t, i=>t[i][0]); 

उत्तर

15

आप LINQ के SelectMany विधि, जैसे उपयोग कर सकते हैं:

var list = new List<string> { "Foo", "Bar" }; 

var chars = list.SelectMany(s => s.ToCharArray()); 
var distinct = chars.Distinct(); 
+0

सूची अनन्य क्रैक्टैक्टर्स = डिक्शनरी। चयन करें (एस => एस। टॉहरएरे())। विशिष्ट()। toList(); क्या मैं अंत में साथ चला गया है - धन्यवाद :) – simonalexander2005

+0

अंत में एक 'HashSet' का उपयोग करते हुए' वर अलग = नए HashSet (वर्ण) 'एक और उचित विकल्प है, तो सवाल उदारतापूर्वक व्याख्या कर रहा है। भी http://stackoverflow.com/questions/1388361/getting-all-unique-items-in-ac-list देखें –

+0

'ToCharArray' कॉल अनावश्यक है और प्रदर्शन पर एक छोटा सा प्रभाव पड़ता है क्योंकि पात्रों से नकल करने की आवश्यकता है एक नई सरणी के लिए स्रोत स्ट्रिंग। आप बस 'सूची कर सकते हैं। इसके बजाय कई (एस => एस)' चुनें। – LukeH

1

की तर्ज पर कुछ करने की जरूरत है अपने LinQ परिणाम प्राप्त करें और पाश में कहते हैं, हर चार तुलना चार की सूची में।

foreach (string character in dictionary) 
     { 
      if (!(uniqueCharacters).Contains(character)) 
      { 
       uniqueCharacters.Add(character); 
      } 
     } 
+0

अच्छा जवाब है, लेकिन मैं यह सब LinQ में करने के लिए सक्षम होने के लिए उम्मीद कर रहा था -, शिक्षण अनुभव के लिए अगर और कुछ नहीं – simonalexander2005

+1

इसकी सिर्फ एक एसक्यूएल कमांड की तरह DISTINCT अपनी लिनक्यू क्वेरी लिखें, और अंतिम –

संबंधित मुद्दे