[英]How to numerically order array of delimited strings in C#
我有点受约束。 我正在使用遗留系统,其中包含一堆我需要解析的分隔字符串。 不幸的是,字符串需要根据字符串的第一部分进行排序。 该数组看起来像
array[0] = "10|JohnSmith|82";
array[1] = "1|MaryJane|62";
array[2] = "3|TomJones|77";
所以我想让数组看起来像
array[0] = "1|MaryJane|62";
array[1] = "3|TomJones|77";
array[2] = "10|JohnSmith|82";
我想过做一个2维数组来抓住第一部分并将字符串留在第二部分,但是我可以在这样的二维数组中混合类型吗?
我不确定如何处理这种情况,有人可以帮忙吗? 谢谢!
调用Array.Sort
,但传入IComparer<string>
的自定义实现:
// Give it a proper name really :)
public class IndexComparer : IComparer<string>
{
public int Compare(string first, string second)
{
// I'll leave you to decide what to do if the format is wrong
int firstIndex = GetIndex(first);
int secondIndex = GetIndex(second);
return firstIndex.CompareTo(secondIndex);
}
private static int GetIndex(string text)
{
int pipeIndex = text.IndexOf('|');
return int.Parse(text.Substring(0, pipeIndex));
}
}
或者,通过适当地拆分字符串,将字符串数组转换为自定义类型数组。 如果你要对数组做进一步的工作,这将使生活更轻松,但如果你只需要对值进行排序,那么你也可以使用上面的代码。
你确实说你需要解析字符串 - 所以你有什么特别的理由要在解码之前解析它们吗?
new[] {
"10|JohnSmith|82",
"1|MaryJane|62",
"3|TomJones|77",
}.OrderBy(x => int.Parse(x.Split('|')[0]));
使用ArrayList( http://msdn.microsoft.com/en-us/library/system.collections.arraylist_methods ( VS.80 ) .aspx )以便对其进行排序。
如果数组很大,您将需要在一次传递中提取所有初始整数,因此您不会在每次比较时解析字符串。 IMO,你真的想首先将字符串中编码的信息封装到一个类中。 然后对这些对象的数组进行排序。
就像是:
class Person {
int Index { get; }
string Name { get; }
int Age { get; } // just guessing the semantic meaning
}
那么:
Person
对象的ArrayList
。 ArrayList.Sort(IComparer)
,其中比较器仅查看索引。 这可能比在每次比较中使用解析更好。
对于lolz
Array.Sort(array, ((x,y) => (int.Parse(x.Split('|')[0]) < int.Parse(y.Split('|')[0])) ? -1 : (int.Parse(x.Split('|')[0]) > int.Parse(y.Split('|')[0])) ? 1 : 0));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.