Индекс массива в C # Windows Phone 7 - PullRequest
0 голосов
/ 15 июля 2011

Я пытаюсь получить только нечетный или только четный индекс списка массивов.Например, мой список массивов - 20. И я хочу отделить четный и нечетный индекс.

Нечетный: 1,3,5,7,9,11,13,15,17,19 Четный: 2,4,6,8,10,12,14,16,18,20

Как я могу это сделать ??

Ответы [ 3 ]

4 голосов
/ 15 июля 2011

Не имеет ли смысла создавать такую ​​структуру, как

class QuizItem 
{ 
    public string Question { get; set; } 
    public string Answer { get; set; }
}

, и создавать из них массив, а не неправильно использовать индексы массива?

3 голосов
/ 15 июля 2011

На Windows Phone 7 я бы сделал это так

var values = Enumerable.Range(1, 21).ToList();

var even = values.Select((value, index) => new { value, index })
                 .Where(elt => elt.index % 2 == 0)
                 .Select(elt => elt.value);

var odd = values.Select((value, index) => new { value, index })
                .Where(elt => elt.index % 2 != 0)
                .Select(elt => elt.value);

Я бы тоже хотел использовать подобный код на любой другой платформе .NET ...

0 голосов
/ 15 июля 2011

Вы можете написать собственное расширение для «оптимизации вещей». Должно работать что-то вроде следующего:

public static class MyExtensions {
    public static IEnumerable<T> EveryOther<T>(this IEnumerable<T> items, int startIndex) {
        if (items == null) throw new ArgumentNullException("items");

        int count = 0;
        foreach (T item in items) {
            if (startIndex > 0) {
                startIndex--;
                continue;
            }
            else if (count % 2 != 0)
                continue;

            count++;
            yield return item;
        }
    }
}

Тогда вы бы использовали это как:

var even = values.EveryOther(0);
var odd= values.EveryOther(1);
...