C# C中字符串数组的自定义排序#
我有一个字符串数组或arraylist,用C#传递给我的程序。下面是这些字符串所包含内容的一些示例: “Spr 2009” “2006年总额” “2010年秋季” “2007年秋季”C# C中字符串数组的自定义排序#,c#,arrays,C#,Arrays,我有一个字符串数组或arraylist,用C#传递给我的程序。下面是这些字符串所包含内容的一些示例: “Spr 2009” “2006年总额” “2010年秋季” “2007年秋季” 我希望能够按照年份和季节对阵列进行排序。有没有一种方法可以编写排序函数,告诉它先按年份排序,然后按季节排序。我知道如果它们是分开的会更容易些,但我无法控制给我的是什么。您需要编写一个方法,以适当的方式比较任意两个字符串,然后您可以将该方法转换为比较委托以传递到数组中。排序: public static int Co
我希望能够按照年份和季节对阵列进行排序。有没有一种方法可以编写排序函数,告诉它先按年份排序,然后按季节排序。我知道如果它们是分开的会更容易些,但我无法控制给我的是什么。您需要编写一个方法,以适当的方式比较任意两个字符串,然后您可以将该方法转换为
比较
委托以传递到数组中。排序
:
public static int CompareStrings(string s1, string s2)
{
// TODO: Comparison logic :)
}
...
string[] strings = { ... };
Array.Sort(strings, CompareStrings);
您也可以对通用列表执行相同的操作:
List<string> strings = ...;
strings.Sort(CompareStrings);
列出字符串=。。。;
strings.Sort(CompareStrings);
您可以随时将它们分开。创建名称-值-值三元组,并像那样使用它们。如果数据格式一致,则使用左字符串函数和右字符串函数。然后你先按年份排序,然后按季节排序。尽管Jon的想法看起来很好,但这是在该方法中添加内容的一个想法。您可以按空格字符分割字符串,将两部分转换为整数,然后使用LINQ:
string[] seasons = new[] { "Spr", "Sum", "Fall", "Winter" };
string[] args = new[] { "Spr 2009", "Sum 2006", "Fall 2010", "Fall 2007" };
var result = from arg in args
let parts = arg.Split(' ')
let year = int.Parse(parts[1])
let season = Array.IndexOf(seasons, parts[0])
orderby year ascending, season ascending
select new { year, season };
我相信你要找的是课堂
我还考虑了Array.Sort,这可能会快一点,但您也提到有时这些是ArrayList。这是有效的,只是它按字母顺序排列季节,而不是按季节顺序排列。代码按季节数组中季节的索引排列,而不是按字母顺序排列。
var strings = new string[] {"Spr 2009", "Sum 2006", "Fall 2010", "Fall 2007"};
var sorted = strings.OrderBy(s =>
{
var parts = s.Split(' ');
double result = double.Parse(parts[1]);
switch(parts[0])
{
case "Spr":
result += .25;
break;
case "Sum"
result += .5;
break;
case "Fall":
result += .75;
break;
}
return result;
});