Пусть имеется такая программа:
// PascalABC.NET 3.1, сборка 1167 от 12.02.2016
begin
var s:=Seq(6,2,8,1,4,9,3,7,5);
var hs:=HSet(s);
ss.Println
end.
Тут все понятно, просто и работает. А как просто и понятно сформировать набор hs, взяв каждый второй элемент из s? Или, взяв из s элементы стоящие по порядку седьмым, третьим, вторым и пятым? Ведь для типа IEnumerable индексного свойства не предусмотрено… Преобразовать s в массив и написать примерно так:
// PascalABC.NET 3.1, сборка 1167 от 12.02.2016
begin
var s:=Seq(6,2,8,1,4,9,3,7,5);
var a:=s.ToArray;
var hs:=HSet(a[8],a[4],a[3],a[6]);
hs.Println;
end.
Но это не решает в общем случае задачу “взять каждый второй”. Вариант, который напрашивается сразу, мне не нравится:
// PascalABC.NET 3.1, сборка 1167 от 12.02.2016
begin
var s:=SeqGen(20,1,t->t+1); // 1,2,3, ... 20
var a:=s.ToArray;
var hs:=HSet(a[1]);
var i:=3;
while i<20 do begin
hs:=HSet(hs.Concat(HSet(a[i]))); // несуразно как-то
Inc(i,2);
end;
hs.Println
end.