উইন্ডোগুলিতে একটি নেটিভ ফাংশন রয়েছে StrCmpLogicalW
যা অক্ষরের পরিবর্তে সংখ্যা হিসাবে স্ট্রিং সংখ্যার সাথে তুলনা করবে। এমন একটি তুলনাকারী তৈরি করা সহজ যা সেই ফাংশনে কল করে এবং তার তুলনার জন্য এটি ব্যবহার করে।
public class StrCmpLogicalComparer : Comparer<string>
{
[DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string x, string y);
public override int Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
}
এমনকি এটি স্ট্রিংগুলিতেও কাজ করে যা পাঠ্য এবং সংখ্যা উভয়ই রয়েছে। এখানে একটি উদাহরণ প্রোগ্রাম যা ডিফল্ট সাজানোর মধ্যে diffrence দেখাবে হয় StrCmpLogicalW
সাজানোর
class Program
{
static void Main()
{
List<string> items = new List<string>()
{
"Example1.txt", "Example2.txt", "Example3.txt", "Example4.txt", "Example5.txt", "Example6.txt", "Example7.txt", "Example8.txt", "Example9.txt", "Example10.txt",
"Example11.txt", "Example12.txt", "Example13.txt", "Example14.txt", "Example15.txt", "Example16.txt", "Example17.txt", "Example18.txt", "Example19.txt", "Example20.txt"
};
items.Sort();
foreach (var item in items)
{
Console.WriteLine(item);
}
Console.WriteLine();
items.Sort(new StrCmpLogicalComparer());
foreach (var item in items)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
যা ফলাফল
Example1.txt
Example10.txt
Example11.txt
Example12.txt
Example13.txt
Example14.txt
Example15.txt
Example16.txt
Example17.txt
Example18.txt
Example19.txt
Example2.txt
Example20.txt
Example3.txt
Example4.txt
Example5.txt
Example6.txt
Example7.txt
Example8.txt
Example9.txt
Example1.txt
Example2.txt
Example3.txt
Example4.txt
Example5.txt
Example6.txt
Example7.txt
Example8.txt
Example9.txt
Example10.txt
Example11.txt
Example12.txt
Example13.txt
Example14.txt
Example15.txt
Example16.txt
Example17.txt
Example18.txt
Example19.txt
Example20.txt