TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Rodney Johnson
NA
80
0
Sort on two values
Dec 2 2011 10:27 AM
I am trying to sort on two values and at this point am not having success. Here is a the code:
internal DataRow[] SortByCubeDecending(DataTable dr)
{
DataTable sortedDR = new DataTable();
//I am setting the data table that will be returned to the data table I am passing in to not alter the orignial
sortedDR = dr;
//This method should sort the datarow array by low weight and high cube for the nose and tail of the trailer
for (int i = 0; i < dr.Rows.Count; i++)
{
for (int j = 1; j < dr.Rows.Count; j++)
{
double cubeOne = (Convert.ToDouble(sortedDR[i][21]) *
Convert.ToDouble(sortedDR[i][22]) * Convert.ToDouble(sortedDR[i][23]));
double cubeTwo = (Convert.ToDouble(sortedDR[j][21]) *
Convert.ToDouble(sortedDR[j][22]) * Convert.ToDouble(sortedDR[j][23]));
double weightOne = Convert.ToInt16(sortedDR[i][20]) / Convert.ToInt16(sortedDR[i][19]);
double weightTwo = Convert.ToInt16(sortedDR[j][20]) / Convert.ToInt16(sortedDR[j][19]);
DataRow temp;
if (cubeOne > cubeTwo && weightOne < weightTwo && dr[i]["status"] == false && dr[j]["status"] == false)
{
temp = sortedDR[i];
sortedDR[i] = sortedDR[j];
sortedDR[j] = temp;
}
}
}
return sortedDR;
}
My goal is to return a data table sorted by cube (volume) and weight. So for example:
sortedDT[0]["cube"] = 10,000
sortedDT[0]["weight"] = 100
sortedDT[1]["cube"] = 9,000
sortedDT[1]["weight"] = 150
sortedDT[2]["cube"] = 8,500
sortedDT[2]["weight"] = 200
...
sortedDT[n - 10]["cube"] = 2,500 (I do not really care about these in the middle)
sortedDT[n - 10]["weight"] = 2,600
...
sortedDT[n]["cube"] = 1,000
sortedDT[n]["weight"] = 700
Whether I do this with a data table or DataRow[] or an array of structures makes not difference to me. What is most important at this point is I get the extreme values at either end of the sorted tables. I will most likely only be using the top, or bottom, 5 rows then resorting. The "status" column refers to whether or not this row is available. If "status" is true the row is extraneous - already acted upon.
Thank you,
Rod
Reply
Answers (
5
)
DataTable.Compute Issue
Get and Set method