C# 在C中对匹配集合进行排序#

C# 在C中对匹配集合进行排序#,c#,arrays,regex,sorting,tcl,C#,Arrays,Regex,Sorting,Tcl,我正试图用C#重写TCL代码。关注代码如下: set list [regexp -all -inline -line {.+\d+.+\d+} $string] 在这种情况下,regexp过程返回字符串中所有匹配项的列表,然后根据字符串末尾的数值,使用另一个表达式对该字符串列表进行排序: set sortedList [lsort -decreasing -integer -index end $list] 问题是,如何在C#中实现同样的效果?我尝试了以下方法: MatchCollecti

我正试图用C#重写TCL代码。关注代码如下:

set list [regexp -all -inline -line {.+\d+.+\d+} $string]
在这种情况下,regexp过程返回字符串中所有匹配项的列表,然后根据字符串末尾的数值,使用另一个表达式对该字符串列表进行排序:

set sortedList [lsort -decreasing -integer -index end  $list]
问题是,如何在C#中实现同样的效果?我尝试了以下方法:

MatchCollection mc = Regex.Matches(inputString, regexPattern, RegexOptions.Multiline);
但是,正如我发现的,我无法直接在C#中对matchcollection进行排序,因此我将每个匹配项复制到一个数组中:

string[] arrayOfMatches = new string[mc.Count];

for (int i = 0; i < mc.Count; i++)
{
arrayOfMatches[i] = mc[i].Groups[1].Value;
}
string[]arrayOfMatches=新字符串[mc.Count];
对于(int i=0;i
但是,当我尝试对arrayOfMatches数组进行排序时,我看不到可用的排序方法。我错过了什么?我是否朝着正确的方向前进?谢谢

是静态的,因此您必须这样称呼它:

Array.Sort(arrayOfMatches, comparison);
其中,
comparison
是可以比较两个字符串的委托,或者是可以比较两个字符串的
IComparer
的实现

但使用LINQ可能更容易:

var matches =
    from Match m in mc
    let value = m.Groups[1].Value
    let numericValue = int.Parse(value)
    orderby numericValue descending
    select value;

这假设整个
就是数字。如果我理解正确,并且您希望从字符串末尾获取一个数值,则必须添加代码来完成此操作。

要对数组进行排序,请使用static
Array.sort()
方法。也就是说,要对匹配进行排序,您需要定义一个IComparer。也许更简单的方法是使用一点linq fu:

var mc = Regex.Matches(input, patter);
var matches = new Match[mc.Count];
mc.CopyTo(matches, 0);
var sorted = matches
    .Select(x => x.Groups[1].Value)
    .OrderBy(x => x);

排序将是按升序排序的组数组的第二项的值。它的工作原理是.Select创建所需的投影,.OrderBy对堆栈进行排序。

Array.Sort()
有一个重载,它接受
比较
委托,您可以向该委托传递lambda。非常感谢大家!我是C#的新手,因此我必须仔细阅读,但我感谢您的所有意见!非常感谢大家!我是C#的新手,因此我必须仔细阅读,但我感谢您的所有意见!我用了一个代表。谢谢!