Re[12]: в каком порядке вытыскивает foreach
От: Lloyd Россия  
Дата: 24.01.07 13:38
Оценка:
Здравствуйте, _FRED_, Вы писали:

L>>У тебя возникли какие-то вопросы после просмотра исходников List.Add и List.Enumerator.MoveNext?


_FR>Нет, но


_FR>Если честь-по-чести, то я говорил совсем о другом… После твоих объяснений данный вопрос меня более не интересует. Хочется сделать так
Автор: _ks_
Дата: 24.01.07
с любым, кто упомянет слово foreach


Предложи свой вариант, замену foreach-у. Очень интересно посмотреть.

_FR>З.Ы. Просто я не умею спорить с теми, кто не замечает мои вопросы и не отвечает на них.


Возможно, ты задаешь их как-то не так?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: в каком порядке вытыскивает foreach
От: GlebZ Россия  
Дата: 24.01.07 14:05
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>это как стандарт с++ и реализация STL

КЛ>Если на FCL есть стандарт ( ), и там ничего не указано про порядок — то порядок — implementation defined. Что значит, что на него не стоит полагаться.
FCL — не стандарт. Его описание — хелп по готовой системе.
Re[13]: в каком порядке вытыскивает foreach
От: Константин Л. Франция  
Дата: 24.01.07 15:20
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Константин Л., Вы писали:


КЛ>>это как стандарт с++ и реализация STL

КЛ>>Если на FCL есть стандарт ( ), и там ничего не указано про порядок — то порядок — implementation defined. Что значит, что на него не стоит полагаться.
GZ>FCL — не стандарт. Его описание — хелп по готовой системе.

я разве это говорил?
Re[12]: в каком порядке вытыскивает foreach
От: _d_m_  
Дата: 24.01.07 21:26
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>З.Ы. Просто я не умею спорить с теми, кто не замечает мои вопросы и не отвечает на них. Лучше я умру, чем буду пытаться переубедить их в чём-то.


Йаду?
Re: в каком порядке вытыскивает foreach
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.01.07 05:58
Оценка: +1
Здравствуйте, vadi, Вы писали:

V>Так вот перебор идет не в том порядке в каком элементы были добавлены в List.

1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.
2. Никаких требований на взаимоотношения методов Add() и GetEnumerator() стандарт не налагает
3. В частности, перебор Dictionary будет происходить вовсе не в том порядке, в котором добавляли.

V>Почему?? и что делать???

Исправлять ошибку в TClass, из-зв которой кажется, что экземаляры идут не в том порядке. Или приводить настоящий код, а не "по мотивам".
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: в каком порядке вытыскивает foreach
От: GlebZ Россия  
Дата: 25.01.07 07:50
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>>>это как стандарт с++ и реализация STL

КЛ>>>Если на FCL есть стандарт ( ), и там ничего не указано про порядок — то порядок — implementation defined. Что значит, что на него не стоит полагаться.
GZ>>FCL — не стандарт. Его описание — хелп по готовой системе.
КЛ>я разве это говорил?
Нет. Но из этого следует что любой пример найденный в хелп может быть интерпретирован как стандарт, или просто считать утвержение верным если оно всегда выполняется. И соответсвенно в следующей версии может быть изменен не только порядок обхода, но и само наличие List<> — если утверждение о том что данная функциональность останется не получено из официального источника. И у меня есть такая мысль, что и List<> в след. версиях будет, и порядок обхода будет совпадать с индексированным обходом.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[15]: в каком порядке вытыскивает foreach
От: nikov США http://www.linkedin.com/in/nikov
Дата: 25.01.07 08:13
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>И у меня есть такая мысль, что и List<> в след. версиях будет, и порядок обхода будет совпадать с индексированным обходом.


Господа, не могу найти в документации того факта, что индексированный обход возвращает элементы в том порядке, в каком они были добавлены.
Я серьезно встревожен!
Re[2]: в каком порядке вытыскивает foreach
От: _FRED_ Черногория
Дата: 25.01.07 10:19
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

V>>Так вот перебор идет не в том порядке в каком элементы были добавлены в List.

S>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.

Ага, щаззз. Вот пример, опровергающий это определение:
using System;
using System.Collections.Generic;
using System.Diagnostics;

class Program
{
  static void Main() {
    List<int> items = new List<int>();
    items.Add(3);
    items.Add(2);
    items.Add(1);
    items.Sort();
    for(int i = 0; i < items.Count; i++) {
      Debug.Print("items[{0}] = {1}", i, items[i]);
    }//for
  }
}


S>3. В частности, перебор Dictionary будет происходить вовсе не в том порядке, в котором добавляли.


Ага, щаззз. Вот пример, опровергающий это определение:

using System;
using System.Collections.Generic;
using System.Diagnostics;

class Program
{
  static void Main() {
    Dictionary<string, int> items = new Dictionary<string, int>();
    items.Add("A", 1);
    items.Add("B", 2);
    items.Add("C", 3);
    foreach(KeyValuePair<string, int> item in items) {
      Debug.WriteLine(item);
    }//for
  }
}


Что ж это за формулировки такие "детские", что они рушатся при ближайшем же рассмотрении?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[16]: в каком порядке вытыскивает foreach
От: _FRED_ Черногория
Дата: 25.01.07 10:19
Оценка: +1 -1
Здравствуйте, nikov, Вы писали:

GZ>>И у меня есть такая мысль, что и List<> в след. версиях будет, и порядок обхода будет совпадать с индексированным обходом.


N>Господа, не могу найти в документации того факта, что индексированный обход возвращает элементы в том порядке, в каком они были добавлены.

N>Я серьезно встревожен!

Я тебя огорчу с удовольствием: индексированный обход класса List<> может возвращать элементы не в том порядке, в котором они были добавлены :о)) Подтверждаю примером:
using System;
using System.Collections.Generic;
using System.Diagnostics;

class Program
{
  static void Main() {
    List<int> items = new List<int>();
    items.Add(3);
    items.Add(2);
    items.Add(1);
    items.Sort();
    for(int i = 0; i < items.Count; i++) {
      Debug.Print("items[{0}] = {1}", i, items[i]);
    }//for
  }
}
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[3]: в каком порядке вытыскивает foreach
От: _FRED_ Черногория
Дата: 25.01.07 10:25
Оценка:
Здравствуйте, _FRED_, Вы писали:

Первый пример должен быть таким:
_FR>using System;
_FR>using System.Collections.Generic;
_FR>using System.Diagnostics;

_FR>class Program
_FR>{
_FR>  static void Main() {
_FR>    List<int> items = new List<int>();
_FR>    items.Add(3);
_FR>    items.Add(2);
_FR>    items.Add(1);
_FR>    items.Sort();
_FR>    foreach(int item in items) {
_FR>      Debug.WriteLine(item);
_FR>    }//for
_FR>  }
_FR>}
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[17]: в каком порядке вытыскивает foreach
От: rameel https://github.com/rsdn/CodeJam
Дата: 25.01.07 10:29
Оценка: :)
Здравствуйте, _FRED_, Вы писали:

Так не честно, я так не играю
... << RSDN@Home 1.2.0 alpha rev. 669>>
Re[2]: в каком порядке вытыскивает foreach
От: vadi  
Дата: 25.01.07 10:37
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, vadi, Вы писали:


V>>Так вот перебор идет не в том порядке в каком элементы были добавлены в List.

S>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.
S>2. Никаких требований на взаимоотношения методов Add() и GetEnumerator() стандарт не налагает
S>3. В частности, перебор Dictionary будет происходить вовсе не в том порядке, в котором добавляли.

V>>Почему?? и что делать???

S>Исправлять ошибку в TClass, из-зв которой кажется, что экземаляры идут не в том порядке. Или приводить настоящий код, а не "по мотивам".

Я тут выяснил что foreach вытаскивает по индексу, а вот ADD у листа не понятно как этот индекс вставляет. Т.е не факт того что подряд метод ADD даст и подрят этот индекс..
Re[18]: в каком порядке вытыскивает foreach
От: _FRED_ Черногория
Дата: 25.01.07 10:37
Оценка: +1
Здравствуйте, rameel, Вы писали:

R>Так не честно, я так не играю


И где же это запрещено
Дело в том, что, как я понимаю, многие просто тут не видят разницы между порядком добавления и порядком хранения элементов, что я и продемонстрировал.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: в каком порядке вытыскивает foreach
От: _FRED_ Черногория
Дата: 25.01.07 10:37
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Так вот перебор идет не в том порядке в каком элементы были добавлены в List.

S>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.

Что ты понимаешь под "стандартных"? Определённых в mscorlib?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[3]: в каком порядке вытыскивает foreach
От: Lloyd Россия  
Дата: 25.01.07 10:47
Оценка:
Здравствуйте, vadi, Вы писали:

V>Я тут выяснил что foreach вытаскивает по индексу, а вот ADD у листа не понятно как этот индекс вставляет. Т.е не факт того что подряд метод ADD даст и подрят этот индекс..


Это факт. При добавлении (Add) элемента он добавляется в конец List-а.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: в каком порядке вытыскивает foreach
От: vitz  
Дата: 25.01.07 10:55
Оценка:
Здравствуйте, vadi, Вы писали:

V>Я тут выяснил что foreach вытаскивает по индексу, а вот ADD у листа не понятно как этот индекс вставляет. Т.е не факт того что подряд метод ADD даст и подрят этот индекс..

Я конечно сильно извиняюсь, но толи я не понял, толь вы воду в ступе колотите (ну или колотаете)
foreach как сказали умные люди выше пользует IEnumerable и IEnumerator, так что в каком порядке IEnumerator пройдет по колекции, в таком порядке эти элементы в foreach и появятся

List<int> ls = new List<int>();
ls.Add(1);
ls.Add(2);
ls.Add(3);
foreach (int item in ls)
    Console.WriteLine(item);
// Тоже что и
IEnumerator ls_Enumerator = ls.GetEnumerator();
while(ls_Enumerator.MoveNext())
    Console.WriteLine(ls_Enumerator.Current);

// Тоже что и
IEnumerator<int> ls_int_Enumerator = ls.GetEnumerator();
while(ls_int_Enumerator.MoveNext())
    Console.WriteLine(ls_int_Enumerator.Current);


А метод Add у List добавляет элемент в конец списка тоесть Insert(item,this.count)

.NET Framework Class Library
List.Add Method
Adds an object to the end of the List.

Re[3]: в каком порядке вытыскивает foreach
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.01.07 12:22
Оценка:
Здравствуйте, _FRED_, Вы писали:
S>>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.
_FR>Что ты понимаешь под "стандартных"? Определённых в mscorlib?
Рекомендую перечитать мой пост еще раз.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: в каком порядке вытыскивает foreach
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.01.07 12:22
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>Ага, щаззз. Вот пример, опровергающий это определение:
Фигней пострадать сильно охота?
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: в каком порядке вытыскивает foreach
От: _FRED_ Черногория
Дата: 25.01.07 12:59
Оценка:
Здравствуйте, Sinclair, Вы писали:

_FR>>Ага, щаззз. Вот пример, опровергающий это определение:

S>Фигней пострадать сильно охота?

Это я фигнёй страдаю? Формальное отношение к определениям уже "фигней" называется? Здравствуйте, приехали. Моя точка зрения на эти безобразия тут
Автор: _FRED_
Дата: 25.01.07
.

Предерживаюсь же я следующей точки зрения:
При обходе набора элементов что надо знать? Индекс текущего элемента от начала? Тогда
int index = 0;
foreach(object item in container) {
  // …
  index++;
}//for

Или позиция элемента в контейнере? В таком случае (если контейнер, конечно же позволяет):
foreach(object item in container) {
  int index = container.IndexOf(item);
  // …
}//for

или же, если опять контейнер позволяет, использовать цикл for вместо foreach.

Теперь что касается добавления: какое вообще значение имеет порядок добавления элементов? Только то, что подразумевает под добавлением контейнер. И не один контейнер _не обязан_ при перечислении возвращать элементы в той же последовательности, в которой они были в него добавлены, например потому, что между добавлением и перечислением можно над контейнером "потворить чудеса".

Зачастую, енумератор по-умолчанию контейнера возвращает элементы в порядке, так сказать, хранения. Это видно хотя бы из кода, которые не сочёл за труд показать Lloyd здесь
Автор: Lloyd
Дата: 24.01.07
. Разницу между порядком добавления и порядком хранения предлагаю додумать читателю.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[4]: в каком порядке вытыскивает foreach
От: _FRED_ Черногория
Дата: 25.01.07 13:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.

_FR>>Что ты понимаешь под "стандартных"? Определённых в mscorlib?
S>Рекомендую перечитать мой пост еще раз.

Перечита. И опять удивился

S>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.


Это _все_ стандартные коллекции? А как же Stack — это уже не стандартная коллекция? или не коллекция? Что я тогда должен подумать о ней, читая и веря твоему посту? Что я "страдаю фигнёй"? Ага.

А что касается CollectionBase, так в наследнике её я могу переехать OnInsert и изменять индек по своему усмотрению. Так что её место в твоём списке мне вообще не понятно.

Ну а про "порядок добавления" я уже сказал здесь
Автор: _FRED_
Дата: 25.01.07
.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.