Member 8478234 Ответов: 1

Как равномерно распределить массив элементов по переменной


У меня есть следующий список
List<int> lstuser = new List<int>();
lstuser.Add(101);
lstuser.Add(102);
lstuser.Add(103);
lstuser.Add(104);

int assigntovariable =0;

Впоследствии мне нужно присвоить вышеприведенные значения списка переменной. То есть переменная будет находиться внутри цикла for &и ее длина может варьироваться от 1 до любой.

for (int i =0;i< 10; i++)
{
assigntovariable = //lstuser от одного к другому в порядке as
assignedtouser = 101, если i = 0
assignedtouser = 102, если i = 1
assignedtouser = 103, если i = 2
assignedtouser = 104, если i = 3
assignedtouser = 101, если i = 4
assignedtouser = 102, если i = 5

.. это будет продолжаться до конца цикла

}

Ниже приведено то, что я пробовал ... но это не очень хорошо, я думаю.. пожалуйста, дайте мне лучшее решение..Заранее спасибо..

<pre lang="C#">List&lt;int&gt; lstuser = new List&lt;int&gt;();
            lstuser.Add(101);
            lstuser.Add(102);
            lstuser.Add(103);
            lstuser.Add(104);
            int userselected = 0;
            int j = 0, x = 0;

            for (int i = 0; i &lt; 10; i++)
            {
                if (x == 0 || x == lstuser.Count)
                     x = 0;
                for (j = x; j &lt; lstuser.Count; j++)
                {
                    if (i &gt; j)
                    {
                        userselected = lstuser[j];
                        if (x == lstuser.Count)
                            x = 0;
                        x = j + 1;
                    }
                    else
                    {
                        userselected = lstuser[i];
                        x = j+1;
                        if (x == lstuser.Count)
                            x = 0;
                    }
                    break;
                }

                int s = userselected;
            }</pre>


Что я уже пробовал:

List<int> lstuser = new List<int>();
            lstuser.Add(101);
            lstuser.Add(102);
            lstuser.Add(103);
            lstuser.Add(104);
            int userselected = 0;
            int j = 0, x = 0;

            for (int i = 0; i < 10; i++)
            {
                if (x == 0 || x == lstuser.Count)
                     x = 0;
                for (j = x; j < lstuser.Count; j++)
                {
                    if (i > j)
                    {
                        userselected = lstuser[j];
                        if (x == lstuser.Count)
                            x = 0;
                         x = j + 1;
                    }
                    else
                    {
                        userselected = lstuser[i];
                        x = j+1;
                        if (x == lstuser.Count)
                            x = 0;
                    }
                    break;
                }

                int s = userselected;
            }

1 Ответов

Рейтинг:
10

OriginalGriff

Самый простой способ-использовать оператор модуля'%'

List<int> lstuser = new List<int>();
lstuser.Add(101);
lstuser.Add(102);
lstuser.Add(103);
lstuser.Add(104);
for (int i = 0; i < 10; i++)
   {
   int assignedToUser = lstUser[i % lstUser.Count];
   ...
   }

Оператор модуля возвращает остаток после деления: таким образом, x % 10 всегда будет от 0 до 9, x % 3 будет от 0 до 2 и x % lstUser.Count будет от 0 до (количество элементов в списке минус один), что и нужно для индекса в списке.