Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/148: Рейтинг темы: голосов - 148, средняя оценка - 4.78
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44

Индексация массивов с 1 (единицы)

18.09.2014, 20:50. Показов 28348. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C# - Индексация массивов с 1 (единицы).

Создаём static класс "a" с одним единственным методом.
Он возвращает значение на единицу меньше принимаемого значения.
Пример:
C#
1
2
3
4
5
6
7
static class a
{
    public static int s(int indexE)
    {
        return indexE - 1;
    }
}
Теперь можно обращаться к любым коллекциям используя нормальную, человеческую индексацию начинающуюся с единицы. Обращение к элементу массива выглядит так:
C#
1
array[a.s(1)]; // Обращаемся к первому элементу массива.
Пример:
C#
1
2
3
4
5
6
7
8
Random rnd = new Random();
int[] array = new int[10]; // Создаём массив из 10 элементов.
 
for (int i = 1; i <= array.Length; i++) // Заполняем массив случайными числами.
    array[a.s(i)] = rnd.Next(0, 100);
for (int i = 1; i <= array.Length; i++) // Выводим сгенерированные значения.
    Console.WriteLine("{0} ячейка = {1}", i, array[a.s(i)]);
Console.ReadLine();
P.S. Тема именно для тех, кому нужна индексация с единицы, а не для тех, кто хочет всему миру объяснить, что это плохо, позорно, извращение и так далее.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2014, 20:50
Ответы с готовыми решениями:

Индексация массивов
Всем доброго времени суток. Есть двумерный массив с индексацией от 0. Можно ли его переделать с индексацией от 1?

Индексация многомерных массивов
Почему в C/C++ массивы объявляются так: int array; Это связано как-то с процессом компиляции кода и другими особенностями языка...

Индексация массивов, арифметика указателей
инициализирую одномерный массив и делаю на него указатель const int N = 6; int X = {9,3,2,3,6,8}; int *mas = X; ...

51
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
18.09.2014, 21:09
Vasaka,
Но если уж хочется так с 1 индексировать, то почему бы не сделать тогда так?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        public static void Main(string[] args)
        {
            MyArray<int> arr = new MyArray<int>(10);
 
            for (int i = 1; i <= 10; i++)
            {
                arr[i] = i;
            }
 
            for (int i = 1; i <= 10; i++)
            {
                Console.WriteLine("index {0}: value {1}", i, arr[i]);
            }
        }
 
 
        public class MyArray<T>
        {
            private T[] array;
 
            public MyArray(int size)
            {
                array = new T[size];
            }
 
            public T this[int index]
            {
                get { return array[index - 1]; }
                set { array[index - 1] = value; }
            }
        }
1
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
18.09.2014, 21:24
Vasaka, не успел, меня XRoy опередил
Но если интересно, вот что набросал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class MyArray<T> : IReadOnlyList<T>
{
    private T[] _data;
 
    public MyArray(int length)
    {
        _data = new T[length];
    }
 
    public MyArray(IEnumerable<T> seq)
    {
        _data = seq.ToArray();
    }
 
    public T this[int index]
    {
        get { return _data[index - 1]; }
        set { _data[index - 1] = value; }
    }
 
    public int Count
    {
        get { return _data.Length; }
    }
 
    public IEnumerator<T> GetEnumerator()
    {
        foreach (T e in _data)
            yield return e;
    }
 
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
 
    public static implicit operator T[](MyArray<T> array)
    {
        return array._data;
    }
    public static implicit operator MyArray<T>(T[] array)
    {
        return new MyArray<T>(array);
    }
}
 
 
class Program
{
    private static void Main(string[] args)
    {
        MyArray<int> a = new[] {1, 2, 3, 4, 5, 6};
        Console.WriteLine(a[1]);
        Console.ReadKey();
    }
}
1
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44
18.09.2014, 21:26  [ТС]
Цитата Сообщение от XRoy Посмотреть сообщение
Но если уж хочется так с 1 индексировать, то почему бы не сделать тогда так?
И очень хорошо. Пусть побольше разных способов будет в теме. Каждый выберет то, что ему нравится (ну а большинство, понятно, так и будут продолжать индексировать с нуля )

Но, мне больше нравится универсальный метод, который подойдёт к любому встроенному классу .NET

Цитата Сообщение от rattrapper Посмотреть сообщение
Vasaka, не успел, меня XRoy опередил
Но если интересно, вот что набросал
Спасибо! Всё подойдёт. И чем больше тем лучше
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
18.09.2014, 21:51
Vasaka,
Вот мне интересно какие это встроенные классы не воспримет мой вариант и вариант rattrapper ?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
18.09.2014, 22:15
Есть готовый массив, который может иметь несколько измерений разной длины и с разным начальным индексом. К примеру одномерный массив строк длинной 3, нумерация которого начинается с 1:
C#
1
2
3
4
5
6
7
8
Array array = Array.CreateInstance(typeof(string), new[] { 3 }, new[] { 1 });
array.SetValue("one", 1);
array.SetValue("two", 2);
array.SetValue("three", 3);
for (int i = array.GetLowerBound(0); i <= array.GetUpperBound(0); i++)
{
    Console.WriteLine("array[{0}] = {1}", i, array.GetValue(i));
}
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.09.2014, 22:30
Цитата Сообщение от Vasaka Посмотреть сообщение
используя нормальную, человеческую индексацию начинающуюся с единицы
Нормальная, человеческая индексация — это как раз с нуля
8
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44
19.09.2014, 09:36  [ТС]
Цитата Сообщение от XRoy Посмотреть сообщение
Вот мне интересно какие это встроенные классы не воспримет мой вариант и вариант rattrapper ?
Возможно, я не совсем правильно выразился. При использовании того способа, который предложил я, можно продолжать использовать массивы и коллекции как обычно, меняется только синтаксис указания индекса.

В вашем случае меняется не только синтаксис индексации. Хотя кому-то может такой способ понравится больше.

Добавлено через 42 минуты
Цитата Сообщение от XRoy Посмотреть сообщение
Вот мне интересно какие это встроенные классы не воспримет мой вариант и вариант rattrapper ?
И потом, если понадобится не массив а какая-нибудь коллекция, List например. Для каждой писать собственный класс не очень удобно.

Добавлено через 12 минут
Цитата Сообщение от kolorotur Посмотреть сообщение
Нормальная, человеческая индексация — это как раз с нуля
Таких тем с холиварами в сети пруд пруди. Давайте не будем создавать ещё одну. Эта тема не для выяснения как лучше и удобней, а для того как это сделать. Просто надо быть немного толерантней. Кому-то удобно считать с 1, кому-то с 0.

А вообще, я не видел ни одного человека начинающего изучать программирование, кто бы не удивился что считать нужно с нуля и не возмутился тому, что это неудобно. Возможно, когда переучишься всё не так печально, но я не вижу смысла переучиваться, если есть возможность пользоваться удобным для себя счётом.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.09.2014, 10:18
Цитата Сообщение от Vasaka Посмотреть сообщение
я не вижу смысла переучиваться, если есть возможность пользоваться удобным для себя счётом
вот только все остальное окружение включая все библиотеки придерживается другого мнения. вернет вам IndexOf (и не только он) индекс позиции, что делать будете? писать array[a.s(i + 1)]? или будет каша из здесь так, а здесь иначе? проще 1 раз научиться (привыкнуть) чем 100 раз потом мозг напрягать и свой, и других

ЗЫ а переучиваться по любому придется или раньше или позже
1
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44
19.09.2014, 10:36  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
вот только все остальное окружение включая все библиотеки придерживается другого мнения.
Вот тут поподробнее можно?
Какие библиотеки?
Цитата Сообщение от pycture Посмотреть сообщение
вернет вам IndexOf
И что такое IndexOf?
Цитата Сообщение от pycture Посмотреть сообщение
(и не только он)
Кто ещё?
Цитата Сообщение от pycture Посмотреть сообщение
или будет каша из здесь так, а здесь иначе?
Каша и сейчас. При индексировании счёт ведётся с 0, а при подсчёте количества с 1. Уж делали бы тогда и подсчёт количества с 0.
Цитата Сообщение от pycture Посмотреть сообщение
100 раз потом мозг напрягать и свой
Мой как раз не напрягается. Всё очень удобно.
Цитата Сообщение от pycture Посмотреть сообщение
и других
Других не напрягаю. Пишу для себя.
Цитата Сообщение от pycture Посмотреть сообщение
ЗЫ а переучиваться по любому придется или раньше или позже
Ну, вот вы считаете, что придётся, а я считаю что нет.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.09.2014, 10:50
Цитата Сообщение от Vasaka Посмотреть сообщение
Какие библиотеки? И что такое IndexOf? Кто ещё?
http://msdn.microsoft.com/ru-r... 10%29.aspx
http://msdn.microsoft.com/ru-r... 10%29.aspx
тысячи их
При индексировании счёт ведётся с 0, а при подсчёте количества с 1. Уж делали бы тогда и подсчёт количества с 0.
чего ?
0
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44
19.09.2014, 11:12  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
http://msdn.microsoft.com/ru-ru/libr...vs.110%29.aspx
http://msdn.microsoft.com/ru-r... 10%29.aspx
тысячи их
Понятно. Я просто напишу ещё один метод для класса "a" прибавляющий 1, через который буду получать индексы.
Два метода на все случаи жизни.
Цитата Сообщение от pycture Посмотреть сообщение
чего ?
Индексы вы считаете с 0. Количество тогда почему с 1 считаете?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.09.2014, 11:16
Цитата Сообщение от Vasaka Посмотреть сообщение
Количество тогда почему с 1 считаете?
я с 0 считаю (как остальные без понятия). количество элементов пустого массива (списка, строки ... ) = 0.

Добавлено через 55 секунд
Я просто напишу ещё один метод для класса "a" прибавляющий 1, через который буду получать индексы.
плохо представляю как у вас это получится
0
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44
19.09.2014, 11:37  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
я с 0 считаю (как остальные без понятия). количество элементов пустого массива (списка, строки ... ) = 0.
Если вы количество с 0 считаете, тогда 18 яблок у вас должно быть равно 17.
Но вот компилятор C# считает количество с 1.
1
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.09.2014, 12:00
вы слишком увлеклись. так и математику можно сломать.
Цитата Сообщение от Vasaka Посмотреть сообщение
Если вы количество с 0 считаете, тогда 18 яблок у вас должно быть равно 17.
18 яблок это 18 яблок. одно это одно. ноль это ноль. 0 + 1 = 0.
что вы тут пытаетесь придумать для меня загадка.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.09.2014, 12:08
в догонку для медитации откуда идет отсчет и как меряется длина
1
19.09.2014, 12:10

Не по теме:

в сочетании с предыдущими постами

Цитата Сообщение от Vasaka Посмотреть сообщение
И что такое IndexOf?
этапять! :D

0
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44
19.09.2014, 12:12  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
18 яблок это 18 яблок. одно это одно. ноль это ноль. 0 + 1 = 0.
что вы тут пытаетесь придумать для меня загадка.
Первое яблоко, это первое яблоко. Почему оно для вас нулевое, для меня загадка, как загадка и для 98% остального населения не являющегося программистами.

Но тема не для этого. У вас есть хороший способ сделать в C# индексацию с 1?

Добавлено через 1 минуту
Цитата Сообщение от valera_21 Посмотреть сообщение
этапять!
Может 4? Вы же с нуля считаете?
1
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.09.2014, 12:57
Цитата Сообщение от Vasaka Посмотреть сообщение
Первое яблоко, это первое яблоко. Почему оно для вас нулевое, для меня загадка, как загадка и для 98% остального населения не являющегося программистами.
я линейку не зря привел. нарусуйте с помощю ее отрезок длиной в 1 см и запишите все действия как алгоритм подробно.
Но тема не для этого. У вас есть хороший способ сделать в C# индексацию с 1?
нет. зачем мне нарушать законы природы? в линейке с чего индексация идет?
0
 Аватар для Vasaka
6 / 6 / 0
Регистрация: 02.11.2012
Сообщений: 44
19.09.2014, 13:02  [ТС]
pycture,
У вас есть хороший способ сделать в C# индексацию с 1? Нет? До свидания.
Тема не для холиваров.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2014, 13:02
Помогаю со студенческими работами здесь

Индексация массивов с помощью указателей
Не смог понять логику вот этой программы, связанной с объявлением массивов через указатель: #include &lt;iostream&gt; ...

Очень сильно мешает индексация массивов с 0
Всем доброго времени суток, нужно решение проблемы индексации массивов с 0 в java с подобных языках. Например мне, после паскаля очень...

Индексация динамических массивов как она работает в С++?
Во всех книгах по крайней мере которые мне встречались массив например mass при инициализации i указывает количество строка а j...

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц)
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

Замена нулей на единицы и единицы на нули в матрицах с использованием функций
Всем доброго времени суток! Пишу программу в которой должна производиться замена нулей, в третьем столбце, на единицы в матрице а. А в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru