static void Main(string[] args)
        {
            string[] arr = { "100-121",,"100-122""1000-210","101-212","101-121","1340-123","1340-223"};
        }
给出所写数组.给这个数组排序..最后结果为:
100-121
100-122
101-121
101-212
1000-210
1340-123
1340-223这个为排序后的结果.谢谢.急用.

解决方案 »

  1.   

    --> 测试数据: #A
    if object_id('tempdb.dbo.#A') is not null drop table #A
    create table #A (A varchar(8))
    insert into #A
    select '100-121' union all
    select '100-122' union all
    select '1000-210' union all
    select '101-212' union all
    select '101-121' union all
    select '1340-123' union all
    select '1340-223'select * from #A ORDER BY LEFT(A,CHARINDEX('-',A)-1)*1,RIGHT(A,LEN(A)-CHARINDEX('-',A))*1
    /*(所影响的行数为 7 行)A        
    -------- 
    100-121
    100-122
    101-121
    101-212
    1000-210
    1340-123
    1340-223(所影响的行数为 7 行)给你整个SQL,不过思想应该相同,转成INT来比较
      

  2.   

    var result=(from a in arr select a ).OrderBy(a=>Convert.Toint16(a.Substring(0,a.IndexOf("-"))))
      

  3.   

    +1string[] arr = { "100-121","100-122","1000-210","101-212","101-121","1340-123","1340-223"};
    arr = arr.OrderBy(s=>int.Parse(s.Replace("-",""))).ToArray();
      

  4.   


    string[] arr = { "100-121","100-122","1000-210","101-212","101-121","1340-123","1340-223"};
                int[] array=new int[arr.Length];
                string sep="-";
                int i;
                for (i = 0; i < arr.Length; i++)
                {
                    arr[i] = arr[i].Replace(sep, "");
                    //Console.WriteLine(arr[i]);
                    array[i]=System.Convert.ToInt32(arr[i]);
                    Console.WriteLine(arr[i]);
                }
    接下来比较大小,自己写了!
    将"-"在插回原来的位置,有个函数insert(int startIndex,string value);
      

  5.   

    lz的测试数据有问题,我故意增加了最后两组数据,可以更多地看出问题所在://由于问题没有说清楚,这里假设都并且只有一个-号(其实这个不太真实合用的)。
    string[] arr = { "100-121", "100-122", "1000-210", "101-212", "101-121", "1340-123", "1340-223", "134-110", "134-111" };
    var result = (from a in arr
                    let pos = a.IndexOf('-')
                    let left = int.Parse(a.Substring(0, pos))
                    let right = int.Parse(a.Substring(pos + 1))
                    orderby left, right
                    select a).ToArray();
      

  6.   

    string[] arr = { "100-121","100-122","1000-210","101-212","101-121","1340-123","1340-223"};
                
                for (int i = 0; i < arr.Length; i++)
                {
                    for (int j = i + 1; j < arr.Length;j++ )
                    {
                        int num1 = Convert.ToInt32(arr[i].ToString().Replace("-",""));
                        int num2 = Convert.ToInt32(arr[j].ToString().Replace("-",""));
                        if (num1 > num2)
                        {
                            string str = arr[i];
                            arr[i] = arr[j];
                            arr[j] = str;
                        }
                    }
                }
      

  7.   

    方法 一
    using System;
    using System.Collections.Generic;public class MyClass
    {
    public static void Main()
    {
     string[] arr = { "100-121","100-122","1000-210","101-212","101-121","1340-123","1340-223"};
            string temp="";
    int tmp;
    int[] arr1=new int[arr.Length];
    int i=0;
    foreach(string s in arr)
    {
       arr1[i++]=Convert.ToInt32(s.Split('-')[0]);
    }
    ///冒泡泡
    for(i=0;i<arr1.Length;i++)
    {
    for(int j=i;j<arr1.Length-1;j++)
    {
    if(arr1[i]>arr1[i+1])
    {
    tmp=arr1[i];
    arr1[i]=arr1[i+1];
    arr1[i+1]=tmp;

    temp=arr[i];  //这块把实际数组排序了
    arr[i]=arr[i+1];
    arr[i+1]=temp;
    }
    }
    }
    foreach(string m in arr)
    {
    Console.WriteLine(m); 
    }

    Console.ReadKey(); 
    }
    }
      

  8.   

    public static void Main()
            {
                string[] arr = { "100-121", "100-122", "1000-210", "101-212", "101-121", "1340-123", "1340-223" };
                int tmp;
                int[,] arr1 = new int[arr.Length, 2];//定义个2维数组,一个放比较的值,一个放实际当前下标;
                int i = 0;
                foreach (string s in arr)
                {
                    arr1[i, 0] = Convert.ToInt32(s.Split('-')[0]);
                    arr1[i, 1] = i++;
                }
                ///冒泡泡
                for (i = 0; i < arr.Length; i++)  //可不是 arr1.Length  这块和下面都要注意
                {
                    for (int j = i; j < arr.Length - 1; j++)
                    {
                        if (arr1[i, 0] > arr1[i + 1, 0])
                        {
                            tmp = arr1[i, 0];
                            arr1[i, 0] = arr1[i + 1, 0];
                            arr1[i + 1, 0] = tmp;                        tmp = arr1[i, 1];                  //实际下标也排序
                            arr1[i, 1] = arr1[i + 1, 1];
                            arr1[i + 1, 1] = tmp;
                        }
                    }
                }
                for (i = 0; i < arr.Length; i++)       //通过排序后的下标 显示arr 就ok 了
                {
                    Console.WriteLine(arr[(arr1[i, 1])]);
                }            Console.ReadKey();
            }
    多维数组有点生疏了
      

  9.   

    要不,把它封装到类中,实现Icomparable
      

  10.   

    上面两个 都错了 没考虑里面的大小,并且 冒泡里面 i应该是j, 修改了下
     public static void Main()
            {
                string[] arr = { "100-123", "100-122", "1000-210", "101-212", "101-121", "1340-1333", "1340-223" };
                int tmp;
                int[,] arr1 = new int[arr.Length, 3];//定义个2维数组,一个放比较的值,一个放实际当前下标;
                int i = 0;
                foreach (string s in arr)
                {
                    arr1[i, 0] = Convert.ToInt32(s.Split('-')[0]);
                    arr1[i, 1] = Convert.ToInt32(s.Split('-')[1]);
                    arr1[i, 2] = i++;
                }
                ///冒泡泡
                for (i = 0; i < arr.Length; i++)
                {
                    for (int j = i; j < arr.Length - 1; j++)
                    {
                        if ((arr1[j, 0] > arr1[j+ 1, 0]) || ((arr1[j, 0] == arr1[j + 1, 0])&&(arr1[j, 1] > arr1[j+ 1, 1])))  //
                        {
                            tmp = arr1[j, 0];
                            arr1[j, 0] = arr1[j + 1, 0];
                            arr1[j + 1, 0] = tmp;                        tmp = arr1[j, 1];
                            arr1[j, 1] = arr1[j + 1, 1];
                            arr1[j + 1, 1] = tmp;                        tmp = arr1[j, 2];                  //实际下标也排序
                            arr1[j, 2] = arr1[j + 1, 2];
                            arr1[j + 1, 2] = tmp;
                        }
                    }
                }
                for (i = 0; i < arr.Length; i++)       //通过排序后的下标 显示arr 就ok 了
                {
                    Console.WriteLine(arr[(arr1[i, 2])]);
                }            Console.ReadKey();
            }
      

  11.   

    嗯,真的只有一个"-"么,那么:Convert.ToDouble(arr[i].Replace("-","."));就可以搞定了:)偷懒的办法