मेरे पास स्ट्रिंग्स की एक सूची है जिसमें एक int (अधिकतम 2 अंक) का अक्षर या स्ट्रिंग प्रस्तुति हो सकती है। उन्हें संख्यात्मक मूल्य पर क्रमबद्ध रूप से क्रमबद्ध करने की आवश्यकता है या (जब यह वास्तव में एक int है) यह प्रतिनिधित्व करता है।मिश्रित संख्याओं और तारों को छंटनी
उदाहरण:
IList<string> input = new List<string>()
{"a", 1.ToString(), 2.ToString(), "b", 10.ToString()};
input.OrderBy(s=>s)
// 1
// 10
// 2
// a
// b
मैं क्या चाहते हो जाएगा
// 1
// 2
// 10
// a
// b
मैं अगर यह इसके साथ स्वरूपित करने के लिए एक सफल TryParse है, यह पार्स करने का प्रयास तो साथ प्रारूपित से जुड़े कुछ पता नहीं है है मेरी अपने कस्टम स्ट्रिंगफॉर्मर को इसके पहले शून्य बनाने के लिए है। मैं कुछ और सरल और प्रदर्शन करने की उम्मीद कर रहा हूं।
संपादित
मैं एक IComparer मैं बाद में उपयोग के लिए मेरे Utils पुस्तकालय में फेंक दिया बनाने समाप्त हो गया।
जबकि मैं उस पर था, मैंने भी मिश्रण में युगल फेंक दिया।
public class MixedNumbersAndStringsComparer : IComparer<string> {
public int Compare(string x, string y) {
double xVal, yVal;
if(double.TryParse(x, out xVal) && double.TryParse(y, out yVal))
return xVal.CompareTo(yVal);
else
return string.Compare(x, y);
}
}
//Tested on int vs int, double vs double, int vs double, string vs int, string vs doubl, string vs string.
//Not gonna put those here
[TestMethod]
public void RealWorldTest()
{
List<string> input = new List<string>() { "a", "1", "2,0", "b", "10" };
List<string> expected = new List<string>() { "1", "2,0", "10", "a", "b" };
input.Sort(new MixedNumbersAndStringsComparer());
CollectionAssert.AreEquivalent(expected, input);
}
ठंडा।यदि पहले पता था तो इसका इस्तेमाल होता: पी –
वास्तव में बहुत अच्छा है, मुझे इसके लिए एक डेल्फी रैपर भी मिला है http://irsoft.de/web/strnatcmp-and-natsort-for-delphi –
यह सभी मामलों में काम नहीं करेगा । मान लें कि ypu में आइटमों की निम्न सूची है: "0/30" "0/248" "0/496" "0/357.6"। सॉर्टिंग के बाद यह ऑर्डर रखेगा, जो आप उम्मीद नहीं कर सकते हैं। –