मैं ऑब्जेक्ट नाम संपत्ति का उपयोग कर वस्तुओं की एक सामान्य सूची को सॉर्ट करने का प्रयास कर रहा हूं। मैं LINQ का उपयोग कर रहा है और निम्न भाव नहीं है काफी काम:जेनरिक सूची पर लिंक आदेश ऑर्डर पूरी तरह से वर्णानुक्रम सूची नहीं देता
var query = possibleWords.OrderBy(x => x.Name.ToLower()).ToList();
foreach (Word word in query) //possibleWords.OrderBy(word => word.Name))
{
listWords.Items.Add(word.Name);
}
"क्वेरी" अब, आदेश दिया मदों की एक सूची शामिल करना चाहिए अगर मैं इसे सही ढंग से समझ और आइटम लिस्टबॉक्स नामित listWords में जोड़ा जाना चाहिए।
हालांकि उत्पादन यह है:
http://screencast.com/t/s1CkkWfXD4 (यूआरएल लिंक के लिए खेद है, लेकिन ऐसा किसी भी तरह मुझे मेरे खाते में नहीं पहुंच गया है और मैं जाहिरा तौर पर इस नए के साथ छवियों पोस्ट नहीं कर सकते हैं)।
सूचीबॉक्स लगभग वर्णमाला है लेकिन काफी नहीं है। किसी कारण से "aa" और "aaaa" आखिरी बार आता है। कारण क्या हो सकता है, और इसे कैसे हल किया जाए?
अग्रिम धन्यवाद।
जब दृश्य स्टूडियो में प्रवेश किया और मार डाला अनुरोध
इस कोड, द्वारा विस्तार:
a
bb
c
Calculator
ccc
Projects
aa
aaa
यह सही ढंग से हल नहीं किया गया है:
List<Word> words = new List<Word>();
words.Add(new Word("a"));
words.Add(new Word("Calculator"));
words.Add(new Word("aaa"));
words.Add(new Word("Projects"));
words.Add(new Word("aa"));
words.Add(new Word("bb"));
words.Add(new Word("c"));
IEnumerable<Word> query = words.OrderBy(x => x.Name.ToLower()).ToList();
foreach (Word word in query)
{
Console.WriteLine(word.Name);
}
मेरा पीछा उत्पादन देता है: पहला "ए" सही है, लेकिन बाद में "aa" और "aaa" प्रविष्टियां सूची के नीचे भेजी जाती हैं।
मैं चरित्र सेट और एन्कोडिंग के बारे में ज्यादा जानकारी नहीं देता हूं, इसलिए संभवतः मैं यहां एक रूकी गलती कर रहा हूं। लेकिन उस मामले में मुझे यह नहीं पता कि यह क्या हो सकता है, और मैं थोड़ा परेशान होगा कि क्यों पहला "ए" सही तरीके से आदेश दे रहा है, लेकिन दूसरा और तीसरा "aa" और "aaa" नहीं है!
आगे विस्तार - शब्द वर्ग
[Serializable()]
public class Word
{
[System.Xml.Serialization.XmlAttribute("Name")]
public string Name { get; set; }
public Word(string name)
{
Name = name;
}
public Word() { } //Parameter less constructor neccessary for serialization
}
कारण और संकल्प
तरह @Douglas सुझाव, समस्या OrderBy विधि के लिए StringComparer.InvariantCultureIgnoreCase comparer की आपूर्ति करके हल किया गया था।
आगे के शोध पर, ऐसा लगता है कि डेनमार्क संस्कृति (दा-डीके) का उपयोग करते समय FindAll और OrderBy विधियों (संभवतः अन्य) में समस्याएं होती हैं। असफल होने वाली अन्य विधियां या संस्कृतियां हो सकती हैं, लेकिन दा-डीके संस्कृति और FindAll + OrderBy विधियां निश्चित रूप से इरादे से काम नहीं कर रही हैं।
ऑर्डरबी विधि में इस धागे (गलत क्रम) में वर्णित समस्या है। FindAll विधि में एक समान, बहुत अजीब समस्या है: मान लें कि हमारे पास प्रविष्टियों की एक सूची है: ए, aa, aaa और aaaa। FindAll (x => x.StartsWith ("a") का उपयोग करते समय, यह केवल "ए" नहीं, aaa और aaaa लौटाएगा। यदि स्टार्टविथ ("एए") का उपयोग करते हैं, तो यह सही ढंग से aa, साथ ही aaa और aaaa भी मिलेगा। स्टार्टविथ ("aaa") का उपयोग करते समय इसे फिर से नहीं मिलेगा, केवल aaa! यह ढांचे में एक बग प्रतीत होता है।
सुनिश्चित करें कि आप बाद में कुछ आइटम नहीं जोड़ते हैं। अर्थात। सत्यापित करें 'query.Count() 'सूची में शब्दों की संख्या के बराबर है। यह भी सुनिश्चित करें कि आप केवल अंग्रेज़ी वर्णों का उपयोग करें। –
यदि आप Winforms का उपयोग कर रहे हैं, तो आप इसका उपयोग करने का प्रयास कर सकते हैं: listBox1.Sorted = true; लिनक ऑर्डरबी के बजाय यह देखने के लिए कि क्या यह समस्या हल करती है – RAS
कोई छवि लिंक पोस्ट करने के बजाय, क्या आप अपना केस दिखाकर एक साधारण उदाहरण पोस्ट कर सकते हैं? –