c# динамический массив
может стоит пользоваться массивом массивов?
и как культурно это будет выглядеть?
List<StringCollection> dannie = new List<StringCollection>
temp.Add("xzcg“);
для одномерного все понятно, а как сделать двумерный? конкретно пример, а то я туплю
string[][] dannie = new string[][]
{
new string[] { "", ""},
new string[] { "", ""}
};
Array.Resize(ref dannie, 1000);
The type arguments for method 'System.Array.Resize<T>(ref T[], int)' cannot be inferred from the usage. Try specifying the type arguments explicitly
У меня 2.0.50727
2.0.50727:)
у меня этот код и скомпилился и запустился
А sp1 ставил? 2.1.21022
неа
тогда ставь
поставил себе весь зоопарк фреймфорков и заработало. А та я и так пробовал и по другому, msdn и googel задолбал и ничего
у меня был прикол, когда я поставил этот sp1 и все перестало работать Потом оказалось, что в sp1 создание динамической сборки приводит к событию AppDomain.AssemblyLoad, а в просто 2.0 - нет
я только не понял, это типа в sp1 вывод типов в компиляторе улучшили, или чо? почему до этого не компилилось?
до этого я не пробовал, но похоже на то
ну мб, мб
компиляция - это ещё что. Вот с AssemblyLoad была песня... весь день выяснял, с какого хрена иногда исключение при инициализации типа случается. Оказалось, где-то там висит обработчик этого события, который для работы с динамическими сборками не предусмотрен
тогда сдаюсьпроще было указать тип явно
ты тоже service pack'и не любишь ставить?
ты тоже service pack'и не любишь ставить?поставить сервис пак это не проблема, а вот сделать, чтобы он ставился везде и всегда это уже проблема
это уже проблема разработчика инсталлятора - сделать так, чтобы этот сервиспак ставился вместе с продуктом, либо (как минимум) проверялось его наличие и если он отсутствует - сообщалось
это уже проблема разработчика инсталлятора - сделать так, чтобы этот сервиспак ставился вместе с продуктом, либо (как минимум) проверялось его наличие и если он отсутствует - сообщалосьу вас всего один разработчик?
речь, в данном случае, не сколько о пользователях, сколько о людях, которые будут build-ить данный код.
у вас всего один разработчик?не один, несколько. И у всех есть почта, чтобы прочитать там рекомендацию поставить новую версию чего-то там.
Каждый раз, когда ты вызываешь Array.Resize Бог убивает котёнка! Подумай о котятках!
List<List<string>> temp = new List<List<string>>
foreach (string[] row in dannie)
{
List<string> tempRow = new List<string>
foreach (string s in row)
{
if (s.Contains("zzz" // или что ты там хотел.
{
tempRow.Add(s);
}
}
// if (tempRow.Count > 0) // если ты этого хочешь
{
temp.Add(tempRow);
}
}
Далее либо так лист листов и вернуть (что дичайше правильно либо, сцепив зубы, конвертнуть в двухмерный массив или в массив массивов.
Но никогда! НИКОГДА!111 Ни за что не думай даже о том, чтобы вызвать ресайз на массив. Потому что неумно вызываемые ресайзы приведут к умножению времени работы проги на O(n а умно вызываемые ресайзы уже имплементированы в List<> и лучше не изобретать их второй раз.
к сожалению, .НЭТ - это вам не STL, и как там внутре реализован List<> мы не знаем. И ещё мы не знаем, как часто топикстартеру надо ресайз делать. Может у него в основном поиск идёт?
как там внутре реализован List<> мы не знаем.во-первых есть рефлектор, скорее всего его будет достаточно, чтобы выяснить какой алгоритм используется.
во-вторых сейчас открыли сорцы (сам пока не подключал, читал, что VS не поддерживает Go to definition, это конечно не удобно, но если очень хочется )
во-первых есть рефлектор, скорее всего его будет достаточнохм... оказывается и правда достаточно. Почему-то думал, что там сплошные InternalCall будут. В общем, устроено аналогично std::vector
к сожалению, .НЭТ - это вам не STL, и как там внутре реализован List<> мы не знаем. И ещё мы не знаем, как часто топикстартеру надо ресайз делать. Может у него в основном поиск идёт?В общем знаем. В хелпе написано, что добавление элемента жрёт O(1) пока хватает capacity или O(n) при ресайзе (правда, чтобы узнать, что оно именно удваивает ёмкость, нужно произвести Эксперимент). И ещё нужно быть в курсе, что такое amortized complexity, как она считается для такого алгоритма и что получается амортизированнное O(1).
Мы прекрасно знаем, как часто топикстартеру нужно делать ресайз — он нам написал пример. Данный конкретный пример с ресайзом тупо сдохнет, если ему дать матрицу с одной строкой на миллион строчек "а". То есть не сдохнет, но считаться будет минуту. Если дать десять миллионов, то считаться будет полтора часа. Вместо доли секунды.
Оставить комментарий
apxx
дан двумерный массив элементов, нужно чтоб на выходе был тоже двухмерный массив с элементами первого которые совпали со stroka. Хочется как можно меньше памяти занимать. Можно конечно создать такой же массив и заполнять его, но на выходе я получу избыточный размер, а данных там дофига.Array.Resize(ref temp, temp.Length + 1); не катит для двумерного
stroka = " dfsdf";
string[,] temp = new string[,] { { " ", " " } };
string[,] dannie = new string[,]
{{"sdfgfg", "zsfgfgfg"},
{"gjhfgjhjgg", "sdfgdfg"},
.......};
i = dannie.Length;
string a, b;
while (n <= i/2-1)
{
a = dannie[n, 0];
b = dannie[n, 1];
if (a.Contains(stroka) )
{
temp[n, 0] = dannie[n, 0];
Array.Resize(ref temp, temp.Length + 1);
Console.WriteLine(dannie[n, 0]);
}
n++;
}