加入/排序两个列表的最佳方式

时间:2014-04-21 11:27:34

标签: c# algorithm sorting

我正在试图找出完成下一个任务的最佳/最快方式。

有一个int列表:

{4,1,112,78}

并且有一个对象列表:

对象{Id,Date,Value}

规则:

  • {int list}包含未按任何特定顺序排序的ID
  • {int list}包含未知数量的元素
  • {object list}在一天中始终只有一个Id出现。可能没有一个日期有两个相同的ID(对象列表已经像这样提供)。你可以说Id + Date代表一个独特的对象。
  • JOIN部分:一天可以有1 ... n项,其中'n'表示{int list}中的元素数。要求是在最终结果中所有日子都有'n'IDS。因此,如果2014年1月1日没有Id = 42的项目,则新项目将添加到此列表中,其值为=。
  • SORT部分:{object list}需要按日期排序,然后按Id排序,但Id顺序必须与{int list}中的顺序相同。

完成此任务的最佳算法是什么?这就是我现在所做的事情:

// first I insert all the missing Ids
// to achieve this, I sorted lists so I now when to expect which Id
var orderedIntList = intList.OrderBy(x => x).ToList();
var orderedObjectList = objectList.OrderBy(x => x.Date).ThenBy(x => x.Id).ToList();

for (int i = 0; i < totalRecords; i++)
{
    currentIndex = i % 4;
    currentId = orderedIntList[currentIndex];

    if (orderedObjectList.Count <= i || currentId != orderedObjectList[i].Id)
        orderedObjectList.Insert(i, new Object { Date = currentDate, Id = currentId });

        currentDate = orderedList[i].Date;
}

// then in order to have items sorted in original order, I use LINQ join
int counter = 0;
var aListWithIndex = activityIds.Select(x => new { Index = counter++, Id = x }).ToList();

return (from a in aListWithIndex
        join b in orderedObjectList on a.Id equals b.Id
        orderby b.Date, a.Index
        select b
       )
       .ToList();

0 个答案:

没有答案