Перечислить через подмножество Набора в C#?

Проблема в том, что CGPoint на самом деле является просто структурой C, но не объектом:

struct CGPoint {
   CGFloat x;
   CGFloat y;
};
typedef struct CGPoint CGPoint;

Если вы используете iPhone, вы можете использовать дополнения NSValue UIKit для преобразования CGPoint в объект NSValue. .

См. Этот предыдущий ответ с примерами: Как можно легко добавить объекты CGPoint в NSArray?

11
задан Paul Sonier 19 May 2009 в 20:05
поделиться

5 ответов

Попробуйте следующее

var col = GetTheCollection();
var subset = col.Skip(250).Take(90);

Или в более общем плане

public static IEnumerable<T> GetRange(this IEnumerable<T> source, int start, int end) {
  // Error checking removed
  return source.Skip(start).Take(end - start);
}

РЕДАКТИРОВАТЬ 2.0 Решение

public static IEnumerable<T> GetRange<T>(IEnumerable<T> source, int start, int end ) {
  using ( var e = source.GetEnumerator() ){ 
    var i = 0;
    while ( i < start && e.MoveNext() ) { i++; }
    while ( i < end && e.MoveNext() ) { 
      yield return e.Current;
      i++;
    }
  }      
}

IEnumerable<Foo> col = GetTheCollection();
IEnumerable<Foo> range = GetRange(col, 250, 340);
36
ответ дан 3 December 2019 в 01:21
поделиться

Я предпочитаю, чтобы это было просто (если вам не нужен счетчик):

for (int i = 249; i < Math.Min(340, list.Count); i++)
{
    // do something with list[i]
}
3
ответ дан 3 December 2019 в 01:21
поделиться

Адаптация исходного кода Джареда для .Net 2.0:

IEnumerable<T> GetRange(IEnumerable<T> source, int start, int end)
{
    int i = 0;
    foreach (T item in source)
    {
        i++;
        if (i>end) yield break;
        if (i>start) yield return item;
    }
}

И его использование:

 foreach (T item in GetRange(MyCollection, 250, 340))
 {
     // do something
 }
2
ответ дан 3 December 2019 в 01:21
поделиться

Возможно, вы сможете что-то сделать с Linq . Я бы сделал это так, чтобы поместить объекты в массив, а затем я мог бы выбрать, какие элементы я хочу обработать, на основе идентификатора массива.

0
ответ дан 3 December 2019 в 01:21
поделиться

Если вы обнаружите, что вам нужно сделать изрядное количество нарезка и нарезка списков и коллекций,

0
ответ дан 3 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: