C#用一个双字符列表对字符串列表进行排序

本文关键字:列表 字符串 排序 字符 一个 | 更新日期: 2023-09-27 18:21:56

我需要创建一个字符串列表,表示求和值的前五个。

我有一个数据库,里面有数百张与不同服务有关的账单

前任。电动$600 2013年1月水$50一月2013

我需要对所有相同的服务进行汇总我在这里做过

public List<Double> GetSumOfSingleServices
    {
        get
        {
            var sums = (from dc in GetDashboardData                            
                        group dc by dc.serviceType into g
                        select g.Sum(sc => sc.serviceCost)).ToList();
            return sums;
        }
        set
        {
            NotifyPropertyChanged("GetSumOfSingleServices");
        }
    }

我在下面用下面的代码创建了一个字符串列表

public List<String> GetServiceNames
    {
        get
        {
            var names = (from dc in GetDashboardData
                         group dc by dc.serviceType into g                             
                         select g.First().serviceType).ToList();
            return names;
        }
        set
        {
            NotifyPropertyChanged("GetServiceNames");
        }
    }

现在这两个列表中的数据是平行的意思GetSumOfSingleServices[0]是GetServiceNames[0]等的值。

我想要一个列表,其中字符串按GetSumOfSingleServices的最高值排名第一,依此类推

因此,如果最高的GetSumOfSingleServices[3]及其并行字符串是GetServiceNames[3],那么我希望GetServiceNames[3]是我在列表中的第一个条目。

不知道如何按双值对字符串列表进行排序。

C#用一个双字符列表对字符串列表进行排序

有了这样的源代码,所有的转换都变得很容易:

var compositeList = GetDashboardData
     .GroupBy(dc => dc.serviceType)
     .Select(g => new{
                    name = g.Key, 
                    sum = g.Sum(sc => sc.serviceCost)})
     .ToList();

(您可以考虑创建一个具有两个属性namesum的具体类,而不是上面的匿名对象声明)。

现在:

compositeList.OrderByDescending(x => x.sum).Select(x => x.name);

等等

同步列表很糟糕。

对于一般问题,我会使用Schwartzian变换,这是Perl中使用的一种常见模式。将底层方法移植到.net 应该很容易

您的情况更简单,因为您可以完全控制数据访问:

var tuples = from dc in GetDashboardData
            group dc by dc.serviceType into g
            select new{
                Cost = g.Sum(sc=>sc.serviceCost),
                Type = g.Key,
            };
var sorted = tuples.OrderByDescending(t=>t.Cost).Select(t=>t.Type);
return sorted.ToList();

您可以实现要查询的类的IComparable接口,也可以创建一个实现IComparer接口的新类,并将其作为参数传递给排序方法。