#c# #arrays
#c# #массивы #linq
Вопрос:
C # Упрощение инициализации массива строк. Есть ли способ оптимизировать приведенный ниже код на C#
string[] createdBy = new string[totalRowCount];
for (long i = 0; i < totalRowCount; i )
{
createdBy[i] = userName;
}
Также
int?[] defaultInd = new int?[totalRowCount];
for (long i = 0; i < totalRowCount; i )
{
if (i == 0)
{
defaultInd[i] = 1;
}
else
{
defaultInd[i] = 0;
}
}
Комментарии:
1. Не пытаясь быть придурком, просто хочу предложить несколько альтернативных советов, поскольку приведенные ниже ответы дают вам то, что вы хотите. ИМХО, вы должны стремиться к удобочитаемости, а не к умному синтаксическому сахару. Я сомневаюсь, что использование сокращенных методов приведет к заметному увеличению производительности, и вы просто усложняете отладку, если что-то пойдет не так, поскольку я предполагаю, что вы не слишком хорошо знакомы с синтаксисом. Только мои два цента 😉
Ответ №1:
string[] myIntArray = Enumerable.Repeat(userName, totalRowCount).ToArray();
Ответ №2:
Вы можете использовать Enumerable.Range
для построения повторяющихся последовательностей:
string[] createdBy = Enumerable.Range(0, totalRowCount)
.Select(i => userName)
.ToArray();
int?[] defaultInd = Enumerable.Range(0, totalRowCount)
.Select(i => i==0 ? (int?)1 : 0)
.ToArray();
Обратите внимание, что первое лямбда-выражение не использует значение index i
, потому что все элементы имеют одинаковую строку.
Ответ №3:
Существует не так много способов упростить цикл for в обоих примерах, если вы не используете перечисление.Диапазон, как показано в других ответах. Однако во втором примере вы могли бы использовать тернарный оператор:
defaultInd[i] = i == 0 ? 1 : 0;