我有一个类列表,其中包含事件名称、时间戳和持续时间(timespan)。有许多重复的事件名称。我想通过事件名称合并它们,并添加它们的持续时间,并保留最早的时间戳,除非事件具有特定的名称。即,删除重复的事件名称,为相似的事件名称添加持续时间,并保留偶数名称的最早时间戳。
有更好的方法吗?可能是用LINQ吗?
下面是我尝试过的,它似乎没有正确地合并(仍然有重复的但更少)
类:
public class eventRecords
{
public DateTime TimeStamp { get; set; }
public string Event { get; set; }
public TimeSpan Duration { get; set; }
}
我的尝试:
// allEventList is already sorted by TimeStamp, so my thinking is adding
// the first occurrence of an event to newList will keep the earliest
// TimeStamp in eventRecrods for that event
// Also - the duplicates are almost all consecutive in allEventList
var newList = new List<eventRecords>();
for (int ii = 0; ii < allEventList.Count; ii++ )
{
newList.Add(allEventList[ii]);
if((ii + 1) < allEventList.Count && allEventList[ii] != keyword)
{
if(allEventList[ii].Event == allEventList[ii+1].Event)
{
newList.Last().Duration = newList.Last().Duration+ allEventList[ii + 1].Duration;
ii = ii + 1;
}
}
}
例如,如果allEventList包含:
Event = "Action 1", TimeStamp = 08:00, Duration = TimeSpan.FromMinutes(1);
Event = "Action 1", TimeStamp = 09:00, Duration = TimeSpan.FromMinutes(1);
Event = "Action 1", TimeStamp = 10:00, Duration = TimeSpan.FromMinutes(1);
Event = "KeyWord", TimeStamp = 11:00, Duration = TimeSpan.FromMinutes(1);
Event = "Action 2", TimeStamp = 12:00, Duration = TimeSpan.FromMinutes(1);
Event = "Action 2", TimeStamp = 13:00, Duration = TimeSpan.FromMinutes(1);
newList应包含:
Event = "Action 1", TimeStamp = 08:00, Duration = TimeSpan.FromMinutes(3);
Event = "KeyWord", TimeStamp = 11:00, Duration = TimeSpan.FromMinutes(1);
Event = "Action 2", TimeStamp = 12:00, Duration = TimeSpan.FromMinutes(2);
这一点相当容易
我想按事件名称合并它们,并添加它们的持续时间,并保留最早的时间戳
allEventList.GroupBy(e => e.Event)
.Select(g => new eventRecords{
TimeStamp = g.Min(e => e.TimeStamp),
Event = g.Key,
Duration = new TimeSpan(g.Sum(e => e.Duration.Ticks))
});
这是通过首先按event
对列表进行分组来实现的,这给出了一个IEnumerable
。然后使用select
投影这些组,以生成一个新的EventRecords
并根据请求聚合所需属性。
现场示例:http://rextester.com/mtvnh46675
作为对您的评论的答复,您可以在使用where
对列表进行分组之前对其进行筛选。例如,如果您只需要事件名称长度大于5的事件(虚构的示例!)
allEventList.Where(e => e.Event.Length>5)
.GroupBy(e => e.Event)
.... etc
问题内容: 如何合并列表列表? 进入 如果我可以在合并列表之前在每个项目的开头和结尾添加一个值(例如html标签),那就更好了。 即,最终结果将是: 问题答案: 要串联列表,可以使用 要添加HTML标签,您可以使用列表推导。
我有2个版本的Androidanifest.xml文件在我的项目,一个是主要的,另一个调试。 通过gradle添加了一个库之后,我突然看到: 错误:任务执行失败:应用程序:进程MobileDebugManiast。 清单合并失败:属性application@labelvalue=(XXXX Debug)来自Androidanifest.xml:36: 13-45也存在于[library_name]
错误:任务“:app:ProcessDebugManifest”执行失败。 清单合并失败:来自AndroidManifest.xml:13:9-42的属性application@icon value=(@mipmap/appiconnew)也存在于[com.pnikosis:materialish-progress:1.0]AndroidManifest.xml:13:9-45 value=(@d
我正在尝试使用Unity制作Android游戏。其中我使用了两个模块,它们将使用插件/Android特性1。sqlite.so2。simplenotification.aar它给了我错误: \temp\stagingarea\androidmanifest-main.xml:4:58-89错误:来自androidmanifest-main.xml:4:58-89的属性application@ico
我似乎得到了这样的错误:
问题内容: 我正在将当前项目的大型应用程序移至Android Studio和Gradle中。我目前陷入以下问题: 我尝试将以下属性添加到主文件: 这些属性定义都不起作用。我究竟做错了什么? 问题答案: 试试看: 将此添加到 将此添加到 基于此,它应该覆盖所有元素。“将低优先级声明替换为带注释的声明。”