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这个为排序后的结果.谢谢.急用.
{
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这个为排序后的结果.谢谢.急用.
解决方案 »
- 最近在玩udp p2p通讯, 遇到一个问题, 希望有经验的朋友指点一下, 感谢
- datagridview 标题为什么总是有残影?
- C# 如何取得网络路径下的文件图标?
- 请教个CommandTimeout = 0;的用法?
- HttpWebResponse问题: (400) Bad Request
- aspx 怎样做到 图片切换效果
- 小妹请教!如何在ListView中统计现在有多少行记录!
- 如何快速将一个三维数组拷备到一个一维数组中,一维数组中要指定一个起始位置,Array.copy()行吗?
- C# MDI多文档问题?
- 转义大括号(花括号)---"{}"
- 请问如何获得一个窗体的Intptr~
- 一个面试题.大家说该怎么答?
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来比较
arr = arr.OrderBy(s=>int.Parse(s.Replace("-",""))).ToArray();
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);
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();
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;
}
}
}
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();
}
}
{
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();
}
多维数组有点生疏了
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();
}