分享方法,在程式中需要對list數據進行排序的方法分享。
其實是給我自己看的,以後遇到類似的忘記方法一翻就看到了。
一,自己寫方法進行交換:
List在C#中的排序
List<int> myArray = new List<int>();
int[] nInt = {0,8,3,4,1,7,6 };
for (int j = 0; j < nInt.Length;j++ )
{
if (!myArray.Contains(nInt[j])) //重複的不寫入,例子中沒必要,但是開發中經常用到就加上了
{
myArray.Add(nInt[j]);
}
}
bool flag = true;
for (int j = 0; j < myArray.Count && flag; j++) // 排序
{
flag = false;
for (int k = myArray.Count - 2; k >= j; k--)
{
if (myArray[k] > myArray[k + 1])
{
Swap(myArray, k, k + 1);
flag = true;
}
}
}
交换两个数的方法Swap():
/// <summary>
/// 交换位置
/// </summary>
/// <param name="left">前一个数</param>
/// <param name="right">后一个数</param>
static void Swap(List<int> L, int i, int j)
{
int temp = L[i];
L[i] = L[j];
L[j] = temp;
}
二、使用系統自帶的Sort函數排序:
struct TestData
{
public int nNum;
public int nCheckNum;
public string sTest;
};
List<TestData> lstDate = new List<TestData>();
int[] nInt = { 5, 1, 9 ,9,10};
int[] nInt2 = { 2, 20, 12,8,8 };
string[] sStr = { "30", "0", "10", "11","11" };
for (int i = 0; i <= 4;i++ ) // 填充亂序初始數據
{
TestData sDate = new TestData();
sDate.nNum = nInt[i];
sDate.nCheckNum = nInt2[i];
sDate.sTest = sStr[i];
lstDate.Add(sDate);
}
lstDate.Sort(delegate(TestData x, TestData y) // 排序
{
int nCompare1 = x.nNum.CompareTo(y.nNum);
if (nCompare1 != 0) return nCompare1;
int sCompareTest = x.sTest.CompareTo(y.sTest);
if (sCompareTest != 0) return sCompareTest;
int nCheckNum = (-1 * (x.nCheckNum.CompareTo(y.nCheckNum)));
return nCheckNum;
});
for (int i = 0; i < lstDate.Count;i++ ) // 遍歷打印
{
LOG.Show(lstDate[i].nCheckNum + " " + lstDate[i].nNum + " " + lstDate[i].sTest );
}
效果圖(如下),可以判斷Sort方法在排序時會有先後順序,數據是依據從上到下的條件執行的。
對於排序List int 的話比較簡單,參考如下。
List<int> tmp = new List<int>(){5,1,22,11,4};
tmp.Sort((x, y) => -x.CompareTo(y));
Console.WriteLine(tmp);
//22,11,5,4,1