问题描述
我有一个字符串,作为看看下面的的ArrayList
,我想输出一个新的的ArrayList
排序中以特定的方式。但不能确定的排序是一个很好的方式。帮助将非常AP preciated!
原件(可以在任何随机顺序):
1:1
0:0
0:1
2:1
1:0
2:0
输出:
2:0
2:1
1:0
1:1的
0:0
0:1
虽然我认为无论其他的答案被点上,我会假设你不熟悉一些的.NET 2.0和特点.NET 3.5他们使用。让我们一步一步的时候。
所以,你给予的ArrayList
持以下资料:
{1:1,0:0,0:1,2:1,1:0,2:0}
首先,没有什么是错误使用正则表达式;也许一个小的性能损失。如果字符串真的如此简单,你只需要使用拆分
:
的String [] S = myArray的[I] .Split(新[] {':'});
INT val1中= int.Parse(S [0]);
INT将val2 = int.Parse(S [1]);
不过,既然你说你正在使用.NET 4,你真的不应该使用的ArrayList
在所有 - 请注意,它需要你施展你的价值观他们适当的类型,例如: 串了mystring = myArray的[I]作为字符串
。
有很多伟大的功能,你(因为2.0在.NET Framework)还尚未利用的,比如仿制药。让我们写一个被赋予功能的的ArrayList
,但返回的排序一般列表<串>
(列表,只持有字符串)。让我们一起来看看:
///<总结>
///此方法需要在无序的数字格式的ArrayList:A:B
///并返回一个排序列表<串GT;与递减,B升
///<总结>
公开名单<串GT; SortMyValues(ArrayList的未分类)
{
//声明类型的空,泛型列表'TwoNumbers
清单< MyTuple>值=新的List< MyTuple>();
的foreach(在未排序的对象项)
{
的char [] = splitChar新的char [] {':'};
字符串itemString =项目作为字符串;
字符串[] S = itemString.Split(splitChar);
values.Add(新MyTuple {
FirstNumber = int.Parse(S [0]),
SecondNumber = int.Parse(S [1])
});
}
//排序值
values.Sort();
//返回一个字符串列表,给出的格式
清单<串GT;分类=新的List<串GT;();
的foreach(价值观MyTuple项)
{
sorted.Add(item.FirstNumber +:+ item.SecondNumber);
}
返回排序;
}公共类MyTuple:IComparable的{
公众诠释FirstNumber {搞定;组; }
公众诠释SecondNumber {搞定;组; } 公众诠释的CompareTo(obj对象)
{
如果(obj是MyTuple)
{
MyTuple其他=(MyTuple)目标文件; //第一个数字降
如果(FirstNumber!= other.FirstNumber)
返回other.FirstNumber.CompareTo(FirstNumber);
//第二个数字上升
返回SecondNumber.CompareTo(other.SecondNumber);
}
抛出新的ArgumentException(对象不是MyTuple);
}
}
现在,上面的code ++工程,但的真正的长。请注意,你必须创建一个类仅仅是保持这两个值,使这个类实现IComparable,等等,等等pretty烦!
.NET 3.5与一些伟大的功能,包括匿名类型问世和 LINQ 。让我们改变我们的code同时使用这些功能。
///<总结>
///此方法需要在无序的数字格式的ArrayList:A:B
///并返回一个排序列表<串GT;与递减,B升
///<总结>
公开名单<串GT; SortMyValues(ArrayList的未分类)
{
//首先,投给定的ArrayList的每一个元素为一个字符串
//该演员LT; T>方法将做到这一点,并返回一个枚举集合
返回unsorted.Cast<串GT;()
//现在,让我们来这串数据,并创建我们的对象,将举行两个数字
。选择(项目=> {
//这是一个匿名方法体带有一个参数,我把它叫做'项'
//这个匿名方法将集合中的每一个元素被执行
字符串[] S = item.Split(新[] {':'});
//这里我们创建一个新的匿名类型拿着我们的数字
//不需要定义一个新的虚拟类!
返回新{
FirstNumber = int.Parse(S [0]),
SecondNumber = int.Parse(S [1])
};
})
//现在我们已经得到了我们的目标,让我们对它们进行排序
.OrderByDescending(X => x.FirstNumber)
.ThenBy(X => x.SecondNumber)
//最后,现在,我们正在正确排序,让我们的格式化字符串列表输出
。选择(X => x.FirstNumber +:+ x.SecondNumber)
.ToList();
}
我们的全功能现在只是一条线,而大部分code是注释。我鼓励你们了解并开始使用其中的一些功能;它会让你的code很多更容易阅读和写作; - )
希望这有助于!
编辑:在resopnse您的评论:
It looks like you're sorting by the second number, ascending, and then by the first number, descending.
Simply change the code above to use:
.OrderBy(x => x.SecondNumber)
.ThenByDescending(x => x.FirstNumber)
这篇关于C# - 排序字符串的ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!