2016-12-02 9 views
-2

У меня было задание на работу .NET C#, и один из вопросов: «Инициализировать массив целых чисел со значениями 1,2,3 ... 100 БЕЗ цикла без рекурсии и без инициализации вИнициализировать элементы массива БЕЗ цикла

int[] arr = new [] {1, 2, 3, ...100}; 

можно

+6

'Int обр [] = новый INT [ 100]; arr [0] = 1; arr [1] = 2; arr [2] = 3' ..... –

+5

Это звучит как ужасный вопрос интервью, конечно, они хотели бы, чтобы вы сделали это с помощью цикла ... – TheLethalCoder

+3

@ TheLethalCoder Следующий уровень: Можете ли вы написать компилятор C только с локтями. –

ответ

10

Однострочник:.

решение
Enumerable.Range(1,100).ToArray(); 
+0

Я немного беден по терминологии, так что простите меня, если я говорю что-то идиот: это инициализация или вы сделаете просто задание? –

+0

Он возвращает массив, который вам нужно назначить вашей переменной – cokceken

+1

@MatteoUmili Конечно, почему бы и нет? Вы можете, конечно, поставить 'int [] array =' перед ним, чтобы сделать его более очевидным. –

1

C++ (извините, никогда не был в постели с C#) - побочный эффект некоторых других операций

struct foo { 
    static std::vector<int> bar; 
    // constructor 
    foo() { 
    bar.push_back(bar.size()); 
    } 
}; 

// C++ style of initialization of class/static variables 
std::vector<int> foo::bar; 


int main() { 
    do { 
    foo x[100]; // this initializes the foo::bar, goes out of scope and the memory 
       // is freed, but the side effects persist 
    } while(false); 

    std::cout << foo::bar.size() << std::endl; // yeap, 100 
    int* myArray=foo::bar.data(); 
    //^
    // +--- use it before I change my mind and do... 
    foo::bar.clear(); 
    foo y[200]; 
} 
+0

В 'C#', когда вы делаете 'foo x [100];', элементы автоматически не инициализируются конструктором по умолчанию, поэтому у вас будет массив с 100 нулевыми элементами. (и никакого побочного эффекта). +1 +1, потому что мне нравится идея –

+0

@MatteoUmili Даже если вы выделяете структуры (значения), а не ссылки? Я не знаю достаточно C#, но что [я читаю, говорит иначе] (http://stackoverflow.com/a/29669763/620908). (да, я знаю, трюк не будет работать так же, как и для Java, где все объекты «по ссылке») –

+0

В C# 'Structs' не может содержать явные конструкторы без параметров ([CS0568] (https://msdn.microsoft .com/en-us/library/x2xcf8ft.aspx)) –

0

C# решение - не цикл, не рекурсия, а не инициализации, как таковые, отличный способ сделать перерыв ... использует событие очередей при условии, рамочном/OS - конечно, один никогда не будет использовать что-то вроде это на практике , но оно подчиняется требованиям к письму (я расскажу о духе juuust чуть позже). Кроме того, его можно портировать на многие языки, включая javascript (см. Setinterval).

Теперь, простите меня за минуту, мне нужно удалить Mono (и сделайте снимок или два какой-то сильного духа, чтобы преодолеть травмы):

using System; 
using System.Timers; 
using System.Threading; 

namespace foo 
{ 
    class MainClass 
    { 
    public static void Main (string[] args) 
    { 
     int[] a=new int[100]; 
     a [99] = 0; 
     int count = 0; 
     System.Timers.Timer tmr = new System.Timers.Timer(); 
     tmr.Interval = 36000; // so that we can have a beer by the time we have our array 
     tmr.Elapsed += async (sender, e) => 
     { if(count<a.Length) a[count]=count++; } 
     ; 
     tmr.Start(); 
     while (a [99] < 99) { 
     Thread.Sleep (10); 
     } 
     foreach(int i in a) { 
     Console.WriteLine (i); 
     } 

    } 
    } 
} 
+0

Если вы написали это в интервью, и вас наняли вместо того, чтобы рассмеяться из комнаты, компания не та, для которой вы хотите работать. В мире не хватит духа, чтобы вы могли начать свой первоначальный просмотр базы кода. –

+1

@CodyGray «компания не та, для которой вы хотите работать», этот простой вопрос OP - это достаточно знак, который я бы не хотел работать для них. К глупому вопросу, самый глупый ответ - лучший ответ. –

Смежные вопросы