Есть у меня список, и мне требуется последовательно обойти все его элементы. Однако затык: начаться обход может с любого элемента списка. Я думал, что такое легко проделать при помощи LinkedList, если зациклить последний элемент на первый, но оказалось, что этот класс такой фичи не поддерживает. Конечно, можно добиться желаемого простым массивом и комбинацией Linq-овых Skip и Take, но может в .Net есть какая-нибудь готовая структура данных?
Re: Списковый тип с возможностью обхода с произвольного элем
Здравствуйте, MxMsk, Вы писали:
MM>Конечно, можно добиться желаемого простым массивом и комбинацией Linq-овых Skip и Take
Зачем так сложно? Не проще за пять копеек написать универсальную функцию?
IEnumerable<T> CyclicRound<T>(IList<T> items, int firstItemIndex)
{
for (int i = 0; i < items.Length; ++i)
{
int index = (i + firstItemIndex) % items.Length;
yield return items[index];
}
}
Re[2]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, Undying, Вы писали:
U>Зачем так сложно? Не проще за пять копеек написать универсальную функцию?
Сейчас так и сделано. Чешется просто, вдруг есть что готовенькое
Re[3]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, MxMsk, Вы писали:
U>>Зачем так сложно? Не проще за пять копеек написать универсальную функцию? MM>Сейчас так и сделано. Чешется просто, вдруг есть что готовенькое
Объясни чем готовенькое может быть проще и лучше?
Re[4]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, MxMsk, Вы писали:
U>>Объясни чем готовенькое может быть проще и лучше? MM>Не придумывать еще один велосипед
Увы, гусеничные велосипеды с гарпуном для подводной охоты и минибаром спросом не пользуются, а посему в фреймворк не входят.
Re[6]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, Sinix, Вы писали:
U>>>Объясни чем готовенькое может быть проще и лучше? MM>>Не придумывать еще один велосипед S>Увы, гусеничные велосипеды с гарпуном для подводной охоты и минибаром спросом не пользуются, а посему в фреймворк не входят.
Ну хорошо. Я же просто спросил
Re[2]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, Undying, Вы писали:
U>Зачем так сложно? Не проще за пять копеек написать универсальную функцию?
U>
U>IEnumerable<T> CyclicRound<T>(IList<T> items, int firstItemIndex)
U>{
U> for (int i = 0; i < items.Length; ++i)
U> {
U> int index = (i + firstItemIndex) % items.Length;
U> yield return items[index];
U> }
U>}
U>
Это очень неэффективно для LinkedList-а. Кроме того не отслеживается модификация исходного списка.
Re[7]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, Sinix, Вы писали:
S>Если воспринялось как наезд — тыщща извинений, и в мыслях не было
Да мне только минибар нужен был, а ты сразу про гарпун с гусеницами
P.S.
Re[6]: Списковый тип с возможностью обхода с произвольного э
От:
Аноним
Дата:
23.11.10 16:12
Оценка:
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, MxMsk, Вы писали:
U>>>Объясни чем готовенькое может быть проще и лучше? MM>>Не придумывать еще один велосипед S>Увы, гусеничные велосипеды с гарпуном для подводной охоты и минибаром спросом не пользуются, а посему в фреймворк не входят.
а в чем недостатки? ну не неужно минибара мне — я не буду использовать его возбму горпун пока.
Re[7]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, Аноним, Вы писали:
А>а в чем недостатки? ну не неужно минибара мне — я не буду использовать его возбму горпун пока. Дарю:
Re[8]: Списковый тип с возможностью обхода с произвольного э
От:
Аноним
Дата:
23.11.10 16:48
Оценка:
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>а в чем недостатки? ну не неужно минибара мне — я не буду использовать его возбму горпун пока. S>Дарю: S>
взял. спасибо!
а теперь к нашим баранам вернемся — не нужна часть лишнего функционала — не юзай, в чем минусы то?
Re[3]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Undying, Вы писали:
U>>Зачем так сложно? Не проще за пять копеек написать универсальную функцию?
U>>
U>>IEnumerable<T> CyclicRound<T>(IList<T> items, int firstItemIndex)
U>>{
U>> for (int i = 0; i < items.Length; ++i)
U>> {
U>> int index = (i + firstItemIndex) % items.Length;
U>> yield return items[index];
U>> }
U>>}
U>>
L>Это очень неэффективно для LinkedList-а.
Угу. Фактически это превращение O(N) в O(N^2).
По идее тут надо один раз пройти до этого самого firstItemIndex (до итераций), а потом идти до конца, а потом с начала до него же.
With best regards
Pavel Dvorkin
Re[9]: Списковый тип с возможностью обхода с произвольного э
Здравствуйте, Аноним, Вы писали:
А>а теперь к нашим баранам вернемся — не нужна часть лишнего функционала — не юзай, в чем минусы то?
В том, что предложенный сценарий обхода
1. очень специфичен
2. очень легко реализовать самому
Подобных юз-кейзов тысячи, и тащщить их все в фреймворк незачем.
Re[10]: Списковый тип с возможностью обхода с произвольного
От:
Аноним
Дата:
23.11.10 17:20
Оценка:
Здравствуйте, Sinix, Вы писали:
S>В том, что предложенный сценарий обхода S>1. очень специфичен S>2. очень легко реализовать самому
S>Подобных юз-кейзов тысячи, и тащщить их все в фреймворк незачем.
Нет. просто создатели соотв. интерфейса не учли этого момента. (ошиблись, забыли, забили, наняли индусов ).
Ничего страшного.
зы.как описано ниже — не так уж и легко с правильным быстродействием.
Re[11]: Списковый тип с возможностью обхода с произвольного
Здравствуйте, Аноним, Вы писали:
S>>Подобных юз-кейзов тысячи, и тащщить их все в фреймворк незачем.
А>Нет. просто создатели соотв. интерфейса не учли этого момента. (ошиблись, забыли, забили, наняли индусов ).
Учли. Я сильно советую почитать блоги от авторов языка, перед тем как высказывать скоропалительные суждения по его дизайну. Например, классика.
А>зы.как описано ниже — не так уж и легко с правильным быстродействием.
Померяйте как нить изврат в виде
Здравствуйте, Sinix, Вы писали:
S>В том, что предложенный сценарий обхода S>1. очень специфичен S>2. очень легко реализовать самому
А все же жаль, что нельзя зациклить Linked List!