Прочтите приведенное ниже для получения дополнительной информации.Оптимизированный общий список Сплит
У меня есть код ниже, который я использую для разделения общего списка объектов, когда элемент имеет определенный тип.
public static IEnumerable<object>[] Split(this IEnumerable<object> tokens, TokenType type) {
List<List<object>> t = new List<List<object>>();
int currentT = 0;
t.Add(new List<object>());
foreach (object list in tokens) {
if ((list is Token) && (list as Token).TokenType == type) {
currentT++;
t.Add(new List<object>());
}
else if ((list is TokenType) && ((TokenType)list)== type) {
currentT++;
t.Add(new List<object>());
}
else {
t[currentT].Add(list);
}
}
return t.ToArray();
}
Я не имею четкий вопрос, сколько мне интересно, если кто-нибудь знает о каких-либо способов, которыми я могу оптимизировать этот код. Я называю это много раз, и кажется, что это зверь, насколько часы циклы идут. Есть идеи? Я также могу сделать это Wiki, если кто-то заинтересован, возможно, мы сможем отслеживать последние изменения.
Обновление: Я пытаюсь разобрать конкретные жетоны. Его список некоторых классов классов и токенов. Токен имеет свойство (enum) TokenType. Мне нужно найти все классы токена и разделить на каждый из них.
{a b c T d e T f g h T i j k l T m}
расколется как
{a b c}{d e}{f g h}{i j k l}{m}
EDIT UPDATE: Похоже, все мои проблемы скорости приходят в постоянное создание и дополнение родовых списков. Кто-нибудь знает, как я могу обойти это без этого? Это профиль того, что происходит, если он кому-то помогает.
alt text http://i49.tinypic.com/1zvpcmq.png
Простите мое невежество, но какова проблема с этим кодом? –
Ничего себе ... вы переносили этот код из python? Должен быть лучший способ сделать это. – Randolpho
@ Randolpho: Не совсем. – SLaks