-3

我在 MessageBox 中的结果lTest由字符串连接。如果我有重复的键,如何按键(值)对它们进行分组?例如,如果星期一出现四次,星期二出现一次,而不是星期一、星期一、星期一、星期一、星期二。我希望它出现在星期一(4),星期二(1)。

List<int> lNetworkIds = new List<int>();
Dictionary<DisplayDay, int> numDayOccurances = new Dictionary<DisplayDay, int>();
StringBuilder sb = new StringBuilder();
// get a list of distinct network id's for this proposal
foreach (Proposal lDetail in this._Proposal.Details)
{
    if (!lNetworkIds.Contains(lDetail.NetworkId))
        lNetworkIds.Add(lDetail.NetworkId);
    if (!numDayOccurances.ContainsKey(lDetail.Daypart))
        numDayOccurances[lDetail.Daypart] = 0;
    numDayOccurances[lDetail.Daypart]++;
}

if (numDayOccurances.Count > 0)
{

    string lTest = String.Join(", ", numDayOccurances.Keys);

    MessageBox.Show(lTest);

}
4

2 回答 2

1

从您的问题中并不清楚您想做什么,但是如果您有这样的日子列表:

var days = new List<DayOfWeek> { DayOfWeek.Monday, DayOfWeek.Monday, DayOfWeek.Monday,   DayOfWeek.Tuesday, DayOfWeek.Wednesday };

var result = from d in days
group d by d into g
select new
{
    g.Key,
    Count = g.Count()
};

结果是:

Key       Count
Monday    3 
Tuesday   1 
Wednesday 1 

然后,您可以将其写入您认为合适的字符串,例如:

String.Join(Environment.NewLine, result.Select(a => String.Format("{0} ({1})", a.Key, a.Count)))

给出:

星期一 (3)
星期二 (1)
星期三 (1)

于 2013-11-07T16:23:50.397 回答
0

我认为您正在寻找类似的东西:

MessageBox.Show(
string.Join(",", 
numDayOccurances.Keys.GroupBy(r=> r.DayOfWeek)
                .Select(grp => string.Format("{0}({1})", grp.Key, grp.Count())));

考虑到你的班级DisplayDay看起来像:

class DisplayDay
{
    public string  DayOfWeek { get; set; }
}
于 2013-11-07T16:21:29.627 回答