C#里面字符串数组里的元素的排序

Switch_Man 2015-09-12 09:55:10
比如现在有一个字符串一维数组里面有元素{"g","b","q","w"}
如何自己写一个方法来对这里面的元素排序?如果里面有数字的话怎么做类型判断?比如{"g","b","q","w","2","3"}
...全文
1247 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43598278 2019-03-28
  • 打赏
  • 举报
回复
C#怎么对字符串里的字母或单词进行排序,求帮助。才上3节这个课,所以希望得到大家的帮助。
ajianchina 2015-09-13
  • 打赏
  • 举报
回复
泛型冒泡排序

public delegate bool Contrast<T>(T t1, T t2);
public static void Sequence<T>(T[] items, Contrast<T> contrast)
{
	for (int i = 0; i < items.Length; i++)
	{
		for (int j = i + 1; j < items.Length; j++)
		{
			if (contrast(items[i], items[j]))
			{
				var temp = items[i];
				items[i] = items[j];
				items[j] = (T)temp;
			}
		}
	}
}
//调用方法
string[] arr = { "zg", "bb", "A", "ws", "22", "8" ,"09"};
Sequence(arr, (a, b) => a[0] > b[0]);//顺序
//Sequence(arr, (a, b) => a[0] < b[0]);//倒序
Console.WriteLine(string.Join(",", arr));
threenewbee 2015-09-13
  • 打赏
  • 举报
回复
using System;

public class Test
{
	public static void Main()
	{
		string[] data = { "g", "b", "q", "w", "2", "3" };
		for (int i = 0; i < data.GetLength(0); i++)
		{
			for (int j = 1; j < data.GetLength(0) - i; j++)
			{
				if (data[j].CompareTo(data[j - 1]) < 0)
				{
					string t = data[j];
					data[j] = data[j - 1];
					data[j - 1] = t;
				}
			}
		}
		foreach (string s in data) Console.WriteLine(s);
	}
}
http://ideone.com/AyxLdQ 在线测试通过
Switch_Man 2015-09-13
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
冒泡选择快速,你想用哪个?
冒泡
  • 打赏
  • 举报
回复
泛型的话就要了解那个IEqualityComparer还是IComparer接口了
Switch_Man 2015-09-13
  • 打赏
  • 举报
回复
引用 12 楼 ajianchina 的回复:
泛型冒泡排序

public delegate bool Contrast<T>(T t1, T t2);
public static void Sequence<T>(T[] items, Contrast<T> contrast)
{
	for (int i = 0; i < items.Length; i++)
	{
		for (int j = i + 1; j < items.Length; j++)
		{
			if (contrast(items[i], items[j]))
			{
				var temp = items[i];
				items[i] = items[j];
				items[j] = (T)temp;
			}
		}
	}
}
//调用方法
string[] arr = { "zg", "bb", "A", "ws", "22", "8" ,"09"};
Sequence(arr, (a, b) => a[0] > b[0]);//顺序
//Sequence(arr, (a, b) => a[0] < b[0]);//倒序
Console.WriteLine(string.Join(",", arr));
谢谢你耐心的回答!!很难得有人会这么耐心打那么代码!!感激不尽!
Switch_Man 2015-09-13
  • 打赏
  • 举报
回复
引用 11 楼 caozhy 的回复:
using System;

public class Test
{
	public static void Main()
	{
		string[] data = { "g", "b", "q", "w", "2", "3" };
		for (int i = 0; i < data.GetLength(0); i++)
		{
			for (int j = 1; j < data.GetLength(0) - i; j++)
			{
				if (data[j].CompareTo(data[j - 1]) < 0)
				{
					string t = data[j];
					data[j] = data[j - 1];
					data[j - 1] = t;
				}
			}
		}
		foreach (string s in data) Console.WriteLine(s);
	}
}
http://ideone.com/AyxLdQ 在线测试通过
谢谢版主大人的回复!
threenewbee 2015-09-12
  • 打赏
  • 举报
回复
冒泡选择快速,你想用哪个?
Switch_Man 2015-09-12
  • 打赏
  • 举报
回复
引用 6 楼 shingoscar 的回复:
Array.Sort(arr);
谢谢回复,我就是想自己写一个排序方法,不想用框架有的
Switch_Man 2015-09-12
  • 打赏
  • 举报
回复
引用 5 楼 ajianchina 的回复:

string[] arr = { "zg", "bb", "A", "ws", "22", "8" ,"09"};
string temp = string.Empty;
//冒泡排序
for (int i = arr.Length; i > 0; i--)
{
	for (int j = 0; j < i - 1; j++)
	{
		//这里对比的就是元素首字符的ascii码大小
		if (arr[j][0] > arr[j + 1][0])
		{
			temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}
}
Console.WriteLine(string.Join(",", arr));
谢谢!不过我以为这个方法是可以用,但是我写的是一个泛型,就是说我调用包含这个排序方法的类时才确定这个数组的类型,所以arr[j][0] > arr[j + 1][0]不能直接这样比较,不知道你有没有听懂
Poopaye 2015-09-12
  • 打赏
  • 举报
回复
Array.Sort(arr);
ajianchina 2015-09-12
  • 打赏
  • 举报
回复

string[] arr = { "zg", "bb", "A", "ws", "22", "8" ,"09"};
string temp = string.Empty;
//冒泡排序
for (int i = arr.Length; i > 0; i--)
{
	for (int j = 0; j < i - 1; j++)
	{
		//这里对比的就是元素首字符的ascii码大小
		if (arr[j][0] > arr[j + 1][0])
		{
			temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}
}
Console.WriteLine(string.Join(",", arr));
Switch_Man 2015-09-12
  • 打赏
  • 举报
回复
引用 2 楼 ajianchina 的回复:
字母默认从a到z,数值从0到9,同时含数字跟字母的话,数字在前字母在后,总之按每个元素第一个索引位char的ascii值的大小排序。
我试一试这个方法
Switch_Man 2015-09-12
  • 打赏
  • 举报
回复
引用 1 楼 ajianchina 的回复:
你可以直接按数组内元素排序,默认规则是数组内string元素第1个索引位的char排序。 string[] arr = {"g","b","q","w"}; arr = arr.OrderBy(p => p).ToArray(); 不知道你的排序规则是什么,默认排序就这样。
你那个方法属于linq方面的吗?可不可以不用那方面的,就用类似冒泡排序那样做就可以了。 如果元素都是字母就按字母顺序,如果有数字的话先排完字母的再排数字,或者可以用ASC码来做吗?
ajianchina 2015-09-12
  • 打赏
  • 举报
回复
字母默认从a到z,数值从0到9,同时含数字跟字母的话,数字在前字母在后,总之按每个元素第一个索引位char的ascii值的大小排序。
ajianchina 2015-09-12
  • 打赏
  • 举报
回复
你可以直接按数组内元素排序,默认规则是数组内string元素第1个索引位的char排序。 string[] arr = {"g","b","q","w"}; arr = arr.OrderBy(p => p).ToArray(); 不知道你的排序规则是什么,默认排序就这样。

111,108

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧