Здравствуйте, vadi, Вы писали:
V>Затем перебираю все это с помощью foreach.
V>Так вот перебор идет не в том порядке в каком элементы были добавлены в List. V>Почему?? и что делать???
using System;
using System.Collections.Generic;
namespace ConsoleApplication7
{
class TClass
{
private string _value;
public string Value
{
get { return _value; }
}
public TClass(string value)
{
_value = value;
}
}
class Program
{
static void Main(string[] args)
{
List<TClass> list = new List<TClass>();
list.Add(new TClass("aaa"));
list.Add(new TClass("bbb"));
list.Add(new TClass("cc"));
list.Add(new TClass("dd"));
list.Add(new TClass("eee"));
list.Add(new TClass("fff"));
foreach (TClass t in list)
Console.WriteLine(t.Value);
}
}
}
Здравствуйте, OrSol, Вы писали:
V>>Так вот перебор идет не в том порядке в каком элементы были добавлены в List. V>>Почему?? и что делать???
OS>Должен выводить в порядке добавления. как альтернативу можно через for попробовать.
Что означает это "Должен"? К чему это относится?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, vadi, Вы писали:
V>>Почему?? и что делать???
_FR>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach. Даже если где-то он соблюдается.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, vadi, Вы писали:
V>>Затем перебираю все это с помощью foreach.
V>>Так вот перебор идет не в том порядке в каком элементы были добавлены в List. V>>Почему?? и что делать???
L>
L>using System;
L>using System.Collections.Generic;
L>namespace ConsoleApplication7
L>{
L> class TClass
L> {
L> private string _value;
L> public string Value
L> {
L> get { return _value; }
L> }
L> public TClass(string value)
L> {
L> _value = value;
L> }
L> }
L> class Program
L> {
L> static void Main(string[] args)
L> {
L> List<TClass> list = new List<TClass>();
L> list.Add(new TClass("aaa"));
L> list.Add(new TClass("bbb"));
L> list.Add(new TClass("cc"));
L> list.Add(new TClass("dd"));
L> list.Add(new TClass("eee"));
L> list.Add(new TClass("fff"));
L> foreach (TClass t in list)
L> Console.WriteLine(t.Value);
L> }
L> }
L>}
L>
L>Вывод: L>
aaa
L>bbb
L>cc
L>dd
L>eee
L>fff
L>Доктор, что я делаю неправильно?
Я пример просто так накидал.... Просто смотря какие объекты добавляются.
Здравствуйте, vadi, Вы писали:
V>Здравствуйте, _FRED_, Вы писали:
_FR>>Здравствуйте, vadi, Вы писали:
V>>>Почему?? и что делать???
_FR>>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach. Даже если где-то он соблюдается.
V>Почему? Это спицифика foreach?
Потому что List<>(и foreach) использует интерфейс IEnumerator, в котором опрелены методы Reset(), bool Movenext() и object Current. А вот как его реализует разработчик класса (в т.ч. и стороннего) ни кто не знает.
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Здравствуйте, vadi, Вы писали:
V>>>Почему?? и что делать???
_FR>>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach. Даже если где-то он соблюдается.
V>Почему? Это спицифика foreach?
Я поторопился немного: в стандарте определён порядок foreach для массивов (одно- и много-размерных). Специфика в том, как контейнер (тот, в котором находятся перебираемые элементы) хранит элементы. Вот пример:
using System;
using System.Collections.Generic;
using System.Diagnostics;
class Program
{
static void Main() {
Stack<int> stack = new Stack<int>();
stack.Push(3);
stack.Push(2);
stack.Push(1);
foreach(object value in stack) {
Debug.WriteLine(value);
}//for
SortedList<int, object> list = new SortedList<int, object>();
list.Add(2, null);
list.Add(3, null);
list.Add(1, null);
foreach(object value in list) {
Debug.WriteLine(value);
}//for
}
}
В каждом из примеров возвращаемый порядок не совпадает с порядком добавления, но является более логичным.
Из-за этого-то порядок элементов не стандартизировали на уровне языка (кроме порядка обхода массивов). Он определяется контейнером. Но в документации к List<> я не нашёл упоминания этого момента.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, vadi, Вы писали:
V>>>>Почему?? и что делать???
_FR>>>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach. Даже если где-то он соблюдается.
V>>Почему? Это спицифика foreach?
_FR>Я поторопился немного: в стандарте определён порядок foreach для массивов (одно- и много-размерных). Специфика в том, как контейнер (тот, в котором находятся перебираемые элементы) хранит элементы. Вот пример: _FR>
_FR> using System;
_FR> using System.Collections.Generic;
_FR> using System.Diagnostics;
_FR> class Program
_FR> {
_FR> static void Main() {
_FR> Stack<int> stack = new Stack<int>();
_FR> stack.Push(3);
_FR> stack.Push(2);
_FR> stack.Push(1);
_FR> foreach(object value in stack) {
_FR> Debug.WriteLine(value);
_FR> }//for
_FR> SortedList<int, object> list = new SortedList<int, object>();
_FR> list.Add(2, null);
_FR> list.Add(3, null);
_FR> list.Add(1, null);
_FR> foreach(object value in list) {
_FR> Debug.WriteLine(value);
_FR> }//for
_FR> }
_FR> }
_FR>
_FR>В каждом из примеров возвращаемый порядок не совпадает с порядком добавления, но является более логичным. _FR>Из-за этого-то порядок элементов не стандартизировали на уровне языка (кроме порядка обхода массивов). Он определяется контейнером. Но в документации к List<> я не нашёл упоминания этого момента.
Ясна, спасибо....
Выходом из этого просто нужно юзать for(...)
тогда все ок получается
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, vadi, Вы писали:
V>>Почему?? и что делать???
_FR>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach. Даже если где-то он соблюдается.
Кто это сказал?
Как в итераторе идут так и в foreach будет. а порядок следования в итераторе он может быть и жестко прописан.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, cvetkov, Вы писали:
C>>Как в итераторе идут так и в foreach будет. а порядок следования в итераторе он может быть и жестко прописан.
_FR>А можно посмотреть хоть на один итератор из FCL, в котором "порядок следования … жестко прописан"?
я не знаю что такое FCL но в стандартной библиотеке есть ArrayList
читать здесь
Current returns the same object until either MoveNext or Reset is called. MoveNext sets Current to the next element.
next element очевидно что имееться в виду next element of collection.
Здравствуйте, vadi, Вы писали:
L>>Если мы конечно говорим о List-е, а не о чем-то другом.
V>Хм... тогда какже объясниить то что у меня достается не в том порядке с помощью foreach и в том порядке с помощью for ???
Здравствуйте, Chardex, Вы писали:
_FR>>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach. Даже если где-то он соблюдается.
C>А если yield return используется?
Это уже реализация твоего собственного енумератора, в которой можно сделать всё, что угодно. Я же говорю о том, что в стандартной библиотеке чётко не сказано про каждый класс, который можно обходить по foreach о том, в какой последовательности он будет возвращать элементы.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Lloyd, Вы писали:
_FR>>Нельзя рассчитывать на какой-либо заранее известный порядок элементов в foreach.
L>Подтасовочка. Речь шла не о foreach-е, а о "foreach-е для List-а".
И где в документации к этому классу сказано, в каком порядке он возвращает элементы, когда используется в foreach?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
L>>Подтасовочка. Речь шла не о foreach-е, а о "foreach-е для List-а".
_FR>И где в документации к этому классу сказано, в каком порядке он возвращает элементы, когда используется в foreach?
А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
Здравствуйте, Lloyd, Вы писали:
L>>>Подтасовочка. Речь шла не о foreach-е, а о "foreach-е для List-а".
_FR>>И где в документации к этому классу сказано, в каком порядке он возвращает элементы, когда используется в foreach?
L>А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
А что ты будешь делать, если в каком либо месте в документации сказано одно, а в исходниках — другое? Всё-таки отталкиваться надо от одного источника.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
L>>А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
_FR>А что ты будешь делать, если в каком либо месте в документации сказано одно, а в исходниках — другое? Всё-таки отталкиваться надо от одного источника.
От кода, естественно. Ибо
Если на клетке слона увидишь надпись «буйвол», не верь глазам своим!
Здравствуйте, _FRED_, Вы писали:
C>>я не знаю что такое FCL…
_FR>А неплохо бы http://www.google.ru/search?q=FCL+.NET
ну теперь буду знать, я пробовал просто http://www.google.ru/search?q=FCL феерическая картинка
C>>ps: да согласен в явном виде это не сказано.
_FR>На это я и напираю.
ну вероятно они посчитали это очевидным
Здравствуйте, _FRED_, Вы писали:
L>>А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
_FR>А что ты будешь делать, если в каком либо месте в документации сказано одно, а в исходниках — другое? Всё-таки отталкиваться надо от одного источника.
Кстати, ты так и не сказал, где в докуметации сказано, что порядок неопределен?
Здравствуйте, Lloyd, Вы писали:
L>>>А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а. _FR>>А что ты будешь делать, если в каком либо месте в документации сказано одно, а в исходниках — другое? Всё-таки отталкиваться надо от одного источника. L>Кстати, ты так и не сказал, где в докуметации сказано, что порядок неопределен?
И не собираюсь, потому что считаю, что если порядок был бы определён, то я это увидел бы в документации. Разве не так и где-то есть по-другому?
Кстати, насколько я себе представляю, использование недокументированной возможности часто называется "хаком".
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Lloyd, Вы писали:
L>А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
Кстати, раз уж документация молчит, сформулируй своими словами этот порядок?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Lloyd, Вы писали:
L>А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
Прав в чем? В том, что в текущей реализации foreach для List будет возвращать элементы по порядку — да. Но, по сути, это недокументированная деталь реализации и полагаться на нее без особой необходимости — не лучший подход. Если порядок перечисления важен, то надо просто воспользоваться циклом for. В этом случае алгоритм будет действительно прозрачным.
Здравствуйте, _FRED_, Вы писали:
_FR>И не собираюсь, потому что считаю, что если порядок был бы определён, то я это увидел бы в документации. Разве не так и где-то есть по-другому? _FR>Кстати, насколько я себе представляю, использование недокументированной возможности часто называется "хаком".
Тяжело тебе, наверное. Ведь нигде в документации не сказано, что 2 + 2 = 4.
Здравствуйте, _FRED_, Вы писали:
L>>А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
_FR>Кстати, раз уж документация молчит, сформулируй своими словами этот порядок?
Здравствуйте, Melo, Вы писали:
L>>А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
M>Прав в чем? В том, что в текущей реализации foreach для List будет возвращать элементы по порядку — да. Но, по сути, это недокументированная деталь реализации и полагаться на нее без особой необходимости — не лучший подход.
Это самоочевидная вещь, не нуждающаяся в документировании.
M>Если порядок перечисления важен, то надо просто воспользоваться циклом for. В этом случае алгоритм будет действительно прозрачным.
Кстати, приведи-ка этот прозрачный вариант. Очень интересно посмотреть.
Здравствуйте, Lloyd, Вы писали:
L>>>А где в документации сказано обратное? А в подтверждение того, что я прав я могу привести исходники List.Enumerator-а.
_FR>>Кстати, раз уж документация молчит, сформулируй своими словами этот порядок?
L>Зачем своими словами, когда есть код:
Затем, что код я и сам могу посмотреть. Ты мне скажи, как ты его понимаешь? Кстати, из приведённого тобой кода нигде не видно, что порядок элементов в this.list._items — это тот самый порядок, в котором элементы были добавлены в List<>. Скажи мне, это тот же самый порядок?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
L>>Зачем своими словами, когда есть код:
_FR>Затем, что код я и сам могу посмотреть. Ты мне скажи, как ты его понимаешь? Кстати, из приведённого тобой кода нигде не видно, что порядок элементов в this.list._items — это тот самый порядок, в котором элементы были добавлены в List<>. Скажи мне, это тот же самый порядок?
Здравствуйте, Lloyd, Вы писали:
L>>>Зачем своими словами, когда есть код: _FR>>Затем, что код я и сам могу посмотреть. Ты мне скажи, как ты его понимаешь? Кстати, из приведённого тобой кода нигде не видно, что порядок элементов в this.list._items — это тот самый порядок, в котором элементы были добавлены в List<>. Скажи мне, это тот же самый порядок? L>
Затем, что код я и сам могу посмотреть.
Ты свёл меня с ума. Мне казалось, что я вёл ребёнка по пути познания, а, оказалось, он водил меня за нос вокруг слолба, …
Я не понял, как твоя цитата отвечает на мои вопросы
Ты мне скажи, как ты его понимаешь?
и
это тот же самый порядок?
… но ждать я не буду. Я улечу к звёздам, где мне самое место, в тишине и безмолвии…
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
L>>>>Зачем своими словами, когда есть код: _FR>>>Затем, что код я и сам могу посмотреть. Ты мне скажи, как ты его понимаешь? Кстати, из приведённого тобой кода нигде не видно, что порядок элементов в this.list._items — это тот самый порядок, в котором элементы были добавлены в List<>. Скажи мне, это тот же самый порядок? L>>
Затем, что код я и сам могу посмотреть.
_FR>
_FR>Я не понял, как твоя цитата отвечает на мои вопросы _FR>
Ты мне скажи, как ты его понимаешь?
_FR>и _FR>
это тот же самый порядок?
_FR>
У тебя возникли какие-то вопросы после просмотра исходников List.Add и List.Enumerator.MoveNext?
это как стандарт с++ и реализация STL
Если на FCL есть стандарт ( ), и там ничего не указано про порядок — то порядок — implementation defined. Что значит, что на него не стоит полагаться.
Здравствуйте, _FRED_, Вы писали:
L>>У тебя возникли какие-то вопросы после просмотра исходников List.Add и List.Enumerator.MoveNext?
_FR>Нет, но
_FR>Если честь-по-чести, то я говорил совсем о другом… После твоих объяснений данный вопрос меня более не интересует. Хочется сделать так
Предложи свой вариант, замену foreach-у. Очень интересно посмотреть.
_FR>З.Ы. Просто я не умею спорить с теми, кто не замечает мои вопросы и не отвечает на них.
Здравствуйте, Константин Л., Вы писали:
КЛ>это как стандарт с++ и реализация STL КЛ>Если на FCL есть стандарт ( ), и там ничего не указано про порядок — то порядок — implementation defined. Что значит, что на него не стоит полагаться.
FCL — не стандарт. Его описание — хелп по готовой системе.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Константин Л., Вы писали:
КЛ>>это как стандарт с++ и реализация STL КЛ>>Если на FCL есть стандарт ( ), и там ничего не указано про порядок — то порядок — implementation defined. Что значит, что на него не стоит полагаться. GZ>FCL — не стандарт. Его описание — хелп по готовой системе.
Здравствуйте, _FRED_, Вы писали:
_FR>З.Ы. Просто я не умею спорить с теми, кто не замечает мои вопросы и не отвечает на них. Лучше я умру, чем буду пытаться переубедить их в чём-то.
Здравствуйте, vadi, Вы писали:
V>Так вот перебор идет не в том порядке в каком элементы были добавлены в List.
1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.
2. Никаких требований на взаимоотношения методов Add() и GetEnumerator() стандарт не налагает
3. В частности, перебор Dictionary будет происходить вовсе не в том порядке, в котором добавляли.
V>Почему?? и что делать???
Исправлять ошибку в TClass, из-зв которой кажется, что экземаляры идут не в том порядке. Или приводить настоящий код, а не "по мотивам".
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Константин Л., Вы писали:
КЛ>>>это как стандарт с++ и реализация STL КЛ>>>Если на FCL есть стандарт ( ), и там ничего не указано про порядок — то порядок — implementation defined. Что значит, что на него не стоит полагаться. GZ>>FCL — не стандарт. Его описание — хелп по готовой системе. КЛ>я разве это говорил?
Нет. Но из этого следует что любой пример найденный в хелп может быть интерпретирован как стандарт, или просто считать утвержение верным если оно всегда выполняется. И соответсвенно в следующей версии может быть изменен не только порядок обхода, но и само наличие List<> — если утверждение о том что данная функциональность останется не получено из официального источника. И у меня есть такая мысль, что и List<> в след. версиях будет, и порядок обхода будет совпадать с индексированным обходом.
Здравствуйте, GlebZ, Вы писали:
GZ>И у меня есть такая мысль, что и List<> в след. версиях будет, и порядок обхода будет совпадать с индексированным обходом.
Господа, не могу найти в документации того факта, что индексированный обход возвращает элементы в том порядке, в каком они были добавлены.
Я серьезно встревожен!
Здравствуйте, 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.
Здравствуйте, 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.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, vadi, Вы писали:
V>>Так вот перебор идет не в том порядке в каком элементы были добавлены в List. S>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase. S>2. Никаких требований на взаимоотношения методов Add() и GetEnumerator() стандарт не налагает S>3. В частности, перебор Dictionary будет происходить вовсе не в том порядке, в котором добавляли.
V>>Почему?? и что делать??? S>Исправлять ошибку в TClass, из-зв которой кажется, что экземаляры идут не в том порядке. Или приводить настоящий код, а не "по мотивам".
Я тут выяснил что foreach вытаскивает по индексу, а вот ADD у листа не понятно как этот индекс вставляет. Т.е не факт того что подряд метод ADD даст и подрят этот индекс..
Здравствуйте, 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.
Здравствуйте, 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.
Здравствуйте, vadi, Вы писали:
V>Я тут выяснил что foreach вытаскивает по индексу, а вот ADD у листа не понятно как этот индекс вставляет. Т.е не факт того что подряд метод ADD даст и подрят этот индекс..
Это факт. При добавлении (Add) элемента он добавляется в конец List-а.
Здравствуйте, 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.
Здравствуйте, _FRED_, Вы писали: S>>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase. _FR>Что ты понимаешь под "стандартных"? Определённых в mscorlib?
Рекомендую перечитать мой пост еще раз.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Предерживаюсь же я следующей точки зрения:
При обходе набора элементов что надо знать? Индекс текущего элемента от начала? Тогда
int index = 0;
foreach(object item in container) {
// …
index++;
}//for
Или позиция элемента в контейнере? В таком случае (если контейнер, конечно же позволяет):
foreach(object item in container) {
int index = container.IndexOf(item);
// …
}//for
или же, если опять контейнер позволяет, использовать цикл for вместо foreach.
Теперь что касается добавления: какое вообще значение имеет порядок добавления элементов? Только то, что подразумевает под добавлением контейнер. И не один контейнер _не обязан_ при перечислении возвращать элементы в той же последовательности, в которой они были в него добавлены, например потому, что между добавлением и перечислением можно над контейнером "потворить чудеса".
Зачастую, енумератор по-умолчанию контейнера возвращает элементы в порядке, так сказать, хранения. Это видно хотя бы из кода, которые не сочёл за труд показать Lloydздесь
Здравствуйте, Sinclair, Вы писали:
S>>>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase. _FR>>Что ты понимаешь под "стандартных"? Определённых в mscorlib? S>Рекомендую перечитать мой пост еще раз.
Перечита. И опять удивился
S>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.
Это _все_ стандартные коллекции? А как же Stack — это уже не стандартная коллекция? или не коллекция? Что я тогда должен подумать о ней, читая и веря твоему посту? Что я "страдаю фигнёй"? Ага.
А что касается CollectionBase, так в наследнике её я могу переехать OnInsert и изменять индек по своему усмотрению. Так что её место в твоём списке мне вообще не понятно.
Здравствуйте, _FRED_, Вы писали:
_FR>Я тебя огорчу с удовольствием: индексированный обход класса List<> может возвращать элементы не в том порядке, в котором они были добавлены :о))
И с чем же Lloyd не согласен? Неуж-то элементы всё-таки возвращаются в порядке добавления
Или мой метод не является честным? Гхм…
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Перечита. И опять удивился
_FR>
S>1. Для всех стандартных коллекций енумератор возвращает в порядке добавления. Имеются в виду Array, List<>, ArrayList, CollectionBase.
_FR>Это _все_ стандартные коллекции? А как же Stack — это уже не стандартная коллекция? или не коллекция? Что я тогда должен подумать о ней, читая и веря твоему посту? Что я "страдаю фигнёй"? Ага.
С таким подходом, вам только какой-нить Гражданский Кодекс только и читать. Хотя и там разночтения имеются.
Здравствуйте, _FRED_, Вы писали:
_FR>>Я тебя огорчу с удовольствием: индексированный обход класса List<> может возвращать элементы не в том порядке, в котором они были добавлены :о))
_FR>И с чем же Lloyd не согласен? Неуж-то элементы всё-таки возвращаются в порядке добавления
_FR>Или мой метод не является честным? Гхм…
Во-первых, где ты в первоначальном посте увидел Sort?
А во-вторых, я так и не увидел твоих вариантов, как перебирать коллекцию.
Здравствуйте, Lloyd, Вы писали:
L>А позвольте поинтересоваться, в чем разница между "Индекс текущего элемента от начала" и "позиция элемента в контейнере"?
Дело в том, что я говорил об абстрактных контейнерах. Так вот, для многих контейнеров (хеш-таблицы, например) порядок элементов в них обсуждать бессмысленно.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Lloyd, Вы писали:
L>Во-первых, где ты в первоначальном посте увидел Sort?
Нигде не видел. Но мне удалось продемонстрировать, что Ваша логика не всегда работает?
Если бы всегда всё, о чём я особо не позаботился, происходило так, как мне выгодно и как я "думал" и "имел в виду", я б был чертовски доволен :о))
L>А во-вторых, я так и не увидел твоих вариантов, как перебирать коллекцию.
Здравствуйте, _FRED_, Вы писали:
L>>Во-первых, где ты в первоначальном посте увидел Sort?
_FR>Нигде не видел. Но мне удалось продемонстрировать, что Ваша логика не всегда работает?
Просто надо смотреть на обсуждение в целом, а не придираться к одному выдранному из контекста примеру.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Lloyd, Вы писали:
L>>А позвольте поинтересоваться, в чем разница между "Индекс текущего элемента от начала" и "позиция элемента в контейнере"?
_FR>Дело в том, что я говорил об абстрактных контейнерах. Так вот, для многих контейнеров (хеш-таблицы, например) порядок элементов в них обсуждать бессмысленно.
Обсуждаем, насколько мне позволяет судить первоначальный пост, мы не абстрактный контейнер, а List.
Здравствуйте, _FRED_, Вы писали:
L>>С таким подходом, вам только какой-нить Гражданский Кодекс только и читать. Хотя и там разночтения имеются.
_FR>Ладно, мы все идём в сад :о))
BlackTigerAP:
Вечно вступлю, блин, то в ..., то в рсдновский флейм...
половину твоих постов о том что ты бедняжко вступил в рсдновский флейм, смотри а то rsdn тебя выловит в славном городе бобруйске