C# 双参数数组排序

C# 双参数数组排序,c#,arrays,C#,Arrays,我在数组排序方面有点困难。我有一个类,这个类有两个字段,一个是随机字符串,另一个是随机数。如果我想用一个参数对它进行排序,它就可以正常工作。但我想用两个参数对它进行排序。第一个是数字的总和(从低到高),然后如果这些数字等于给定给它们的随机字符串(从低到高) 你能给我一些提示和提示我怎样才能“合并”这两种排序吗 Array.Sort(Phonebook, delegate(PBook user1, PBook user2) { return user1.Sum().CompareT

我在数组排序方面有点困难。我有一个类,这个类有两个字段,一个是随机字符串,另一个是随机数。如果我想用一个参数对它进行排序,它就可以正常工作。但我想用两个参数对它进行排序。第一个是数字的总和(从低到高),然后如果这些数字等于给定给它们的随机字符串(从低到高)

你能给我一些提示和提示我怎样才能“合并”这两种排序吗

Array.Sort(Phonebook, delegate(PBook user1, PBook user2)
        { return user1.Sum().CompareTo(user2.Sum()); });
        Console.WriteLine("ORDER");

        foreach (PBook user in Phonebook)
        {
            Console.WriteLine(user.name);
        }

这就是我用一个参数排序的方式。

我想这就是你想要的:

sourcearray.OrderBy(a=> a.sum).ThenBy(a => a.random)

以下是用于比较
CompareTo
方法中多个字段的通用算法:

public int compare(MyClass first, MyClass second)
{
    int firstComparison = first.FirstValue.CompareTo(second.SecondValue);

    if (firstComparison != 0)
    {
        return firstComparison;
    }
    else
    {
        return first.SecondValue.CompareTo(second.SecondValue);
    }
}
但是,LINQ确实使执行此操作的语法更容易,只允许您编写:

Phonebook = Phonebook.OrderBy(book=> book.Sum())
            .ThenBy(book => book.OtherProperty)
            .ToArray();

您可以使用自定义的
i比较程序
就地执行此操作。以下内容应按照原始代码对数组进行排序,但如果两个和相等,则应返回随机字符串(我称之为
RandomString
):

您可以通过内联方式执行此操作,但执行起来有点困难:

Array.Sort(Phonebook, (x, y) => { 
    int sc = x.Sum().CompareTo(y.Sum());
    return sc != 0 ? sc : string.Compare(x.RandomString, y.RandomString); });

。。。事实上,这还不算太糟糕,尽管我已经放弃了
null
检查。

你能分享一些代码示例,说明你正在做的哪些是有效的,哪些是无效的?哪些数字的总和?每个项目只有一个数字,对吗?谷歌linq加入查询和订单-有一个提示
Array.Sort(Phonebook, new PBookComparer());
Array.Sort(Phonebook, (x, y) => { 
    int sc = x.Sum().CompareTo(y.Sum());
    return sc != 0 ? sc : string.Compare(x.RandomString, y.RandomString); });