PDA

View Full Version : سوال: مرتب کردن یک لیست!!!



morteza271
جمعه 15 دی 1391, 11:25 صبح
سلام.

فرض کنید ما یه جدول داریم که یه ستون داره به اسم Name و داده های داخل جدول به صورت زیر هست:
A1
A11
A2
A12
A3
A20
A21
A30
A31

چطوری و با چه کوئری میشه این لیست رو مرتب کرد به صورتی که خروجی به صورت زیر باشه :
A1
A2
A3
A11
A12
A20
A21
A30
A31

من خودم کوئری زیر رو نوشتم ولی نتیجه رو اشتباه میده :
Select Name
From Positions
Order By Name
نتیجه این کوئری به صورت زیر میشه :
A1
A11
A12
A2
A20
A21
A3
A30
A31

کسی میتونه کمک کنه؟؟

mousa1992
جمعه 15 دی 1391, 11:47 صبح
سلام عزیز
فک نمیکنم راهی داشته باشید ! چون در رشته ها مثلا 2 بزرگ تر از رشته ی 12 هست !
تنها راهی که هست اینه که همین لیست رو بگیرید و اعدادشو جدا کنین و بر اساس اون تصمیم بگیرید کدوم مقدار تو چه مکانی قرار بگیره

موفق باشید

morteza271
جمعه 15 دی 1391, 11:55 صبح
ممنونم دوست عزیز.
یعنی هیچ راهی نداره!!!!
آخه این روشی که گفتین همیشه جواب نمیده! ممکنه این لیست مثلا شامل عبارت AB12 هم بشه! اونوقت چی؟؟
به نظرم باید یه راهی داشته باشه...
دوستان کسی راهی نداره؟؟

mousa1992
جمعه 15 دی 1391, 12:08 عصر
نه عزیز دنبالش نگرد راهی نیست :بامزه:
فقط باید خودتون ی الگوریتم برا مرتب سازیش بنویسید

ممکنه این لیست مثلا شامل عبارت AB12 هم بشه! اونوقت چی؟؟
مرتب سازی رو که اطلاع دارید به چه صورتی انجام میشه
فرض کنید مقادیر AB2 , A12 ,AB2,AC3 داریم خب _ اول هنگام بازگردانی این اطلاعات از دیتابیس شما sort رو انجام میدید با استفاده از همون کوئری های SQL
خب شما الان یک لیست دارید که به این صورت هست A12,AB12,AB2,AC3 خب شما الان باید ی sort دیگه بین AB12,AB2 انجام بدید که با استفاده دوتا حلقه میشه این کارو انجام داد
البته ی چیزی ، شما اگه A1 , AB12 داشته باشید کدوم اول باید قرار بگیره ؟

morteza271
جمعه 15 دی 1391, 12:42 عصر
نه عزیز دنبالش نگرد راهی نیست
فقط باید خودتون ی الگوریتم برا مرتب سازیش بنویسید
به نظرم باید باشه، من الان یادم نمیاد ولی مطمئنا برنامه هایی هستن که سورتشون درسته و مشکلی نداره!!
اگه قرار باشه خودمون الگوریتمش رو بنویسیم کلی مشکل و استثنا پیش میاد که کنترل کردنش کار سختو پر خطایی خواهد بود!!!


البته ی چیزی ، شما اگه A1 , AB12 داشته باشید کدوم اول باید قرار بگیره ؟
طبق برنامه ای که من نیاز دارم باید A1 اول باشه! البته فکر کنم قانونش هم همینه! چون فکر میکنم اعداد اولویتشون از حروف بیشتره!!

باید راهی باشه برای اینکار ...
من دنبالش هستم...:متفکر:

mousa1992
جمعه 15 دی 1391, 13:02 عصر
ولی مطمئنا برنامه هایی هستن که سورتشون درسته و مشکلی نداره!!
100 % خودشون نوشتن

اگه قرار باشه خودمون الگوریتمش رو بنویسیم کلی مشکل و استثنا پیش میاد که کنترل کردنش کار سختو پر خطایی خواهد بود!!! کار سختی نیست

چون فکر میکنم اعداد اولویتشون از حروف بیشتره!!
البته - اگه به صورت صعودی بخواین مرتب کنین
مرتب سازی براساس کد اسکی ها انجام میشه فرض کنید دو رشته ABBC , ABAF داریم _ خب قرار مرتب بشن ، دو کارکتر اول مقایسه میشه ، هرکدوم که کوچکتر باشه اول قرار میگیره ( در مرتب سازی صعودی) و بقیه رشته بررسی نمیشه
اگه برابر بودن کارکتر بعد رو مقایسه میکنه ( کد اسکی کارکتر ها رو با هم مقایسه میکنه )
این الگوریتمیه که برای مرتب سازی رشته ها استفاده میشه و کد اسکی کارکتر 2 بزرگتر از 11 و 12 هست و نامرتبی های دیگه هم وجود داره ! خب با این اوصاف راهی نیست مگر اینکه خودتون الگوریتمی برای چیزی که میخواین طراحی کنید

یا علی

PhoenixNet
جمعه 15 دی 1391, 18:07 عصر
سلام

از الگوریتم مرتب سازی حرفی عددی (AlphanumComparator) باید استفاده کنید.
ابتدا کد زیر رو به پروژتون اضافه کنید.
http://www.davekoelle.com/files/AlphanumComparator.cs
خط


public class AlphanumComparator : IComparer


رو به خط زیر تبدیل کنید :


public class AlphanumComparator : IComparer<object>


نحوه استفاده :



static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add("A1");
list.Add("A11");
list.Add("A2");
list.Add("A12");
list.Add("A3");
list.Add("A20");
list.Add("A21");
list.Add("A30");
list.Add("A31");
AlphanumComparator.AlphanumComparator comparator = new AlphanumComparator.AlphanumComparator();
list.Sort(comparator);
foreach (var l in list)
{
Console.WriteLine(l);
}
Console.ReadLine();
}

samadblaj
جمعه 15 دی 1391, 18:41 عصر
فکر کنم بشه شرط اول رو بر اساس length و یک sort انجام داد... آره میشه