2016-11-09 4 views
-1

Я изучаю C# и LINQ, поэтому извините за этот вопрос.Как напечатать его в LINQ?

Как ввести linq для группировки тех же элементов в определенном массиве, но когда они группируют его, они видят, если количество групп больше 2, а затем делит его на 2 и возвращает значение количества групп и затем добавить его в целое

то, что я хочу, чтобы LINQ сделать в коде:

s => s > 2 
    s /= 2 
    return s; 

мой исходный код является то, что:

 int n = Convert.ToInt32(Console.ReadLine()); 
     string[] userinput = Console.ReadLine().Split(' '); 
     int[] socks = new int[n]; 
     socks = Array.ConvertAll(userinput, Int32.Parse); 
     var result = socks.GroupBy(s => s > 2).ToArray(); //This is the line which i want help 
     int total = 0; 
     foreach (var group in result) 
     { 
      total += group.Count(); 
      Console.WriteLine(group.Count()); 
     } 

Давайте предположим, что мы имеем 10 видов носки. которые являются 10,20,30,40,50,60,70, 80,90,100

сейчас в первой строке я ввести номер носки я так, например, его 5.

в секунду Например, я могу ввести 5 видов носков. 10 10 20 20 30

Теперь я хочу, чтобы код linq определял, что здесь есть 3 ключа, которые являются 10 20 30, ключ 10 имеет больше, чем только 1 счет имеет 2. то же самое для 20, но только 30 есть 1, поэтому давайте забудем о 30. теперь количество ключей каждого из них равно 2, поэтому давайте разделим его на 2 для каждого из них, затем добавим разделенное число к сумме, так что 2/2 для каждого из них равны 1, поэтому общая сумма = 2 (это мой ожидаемый результат)

+1

Могли бы вы предоставить некоторые exmaples, например, каков ожидаемый результат для 'int [] source = new int [] {1, 2, 2, 2, 3, 4, 5, 5};'? –

+0

@DmitryBychenko должно быть 10 умножений min => 10 и max => 100 для ex. 10 20 30 40 ETC. –

+0

Извините, я не следую за вами: у нас есть группы '5' с элементами' {1, 3, 1, 1, 2} '; после деления (которое мы должны применять в группе элементов '3' только' 2'), мы будем иметь «1 + 1 + 1 + 1 + 2 = 6'. Как мы можем получить '10', пожалуйста? –

ответ

1

Если правильно вас понял, вы хотите считать пары носков:

int total = socks 
    .GroupBy(x => x) 
    .Sum(chunk => chunk.Count()/2); 

в ЗАВИСИМОСТИ в ваш пример:

[10, 10, 20, 20, 30] 

после группирования носков их размерами

10: [10, 10] - 2 socks, 1 pair (you've put it as "divide by 2") 
20: [20, 20] - 2 socks, 1 pair 
30: [30]  - 1 sock, 0 pairs 
------------------------------- 
         2 pairs in total (the expected value) 

Моего примера (из комментариев к вопросу)

1, 2, 2, 2, 3, 4, 5, 5 

должен возвращать 2, а также (у нас есть 2 пар: от 2 и 5)

В случае, если вы хотите получить pairs:

var pairs = socks 
    .GroupBy(x => x) 
    .Select(chunk => new { 
     size = chunk.Key, 
     count = chunk.Count()/2, }); 
    //.Where(pair => pair.count > 0); // you may want to filter out single socks 
+0

Мне жаль, что я не понял, это хорошо, в начале теперь он отлично работает сэр. спасибо –

+0

@Omar Alaa: Добро пожаловать!В следующий раз, пожалуйста, начните с примера (-ов), их гораздо легче понять –

+0

. но почему люди опрокидывают мой вопрос? Я новичок в этом сайте и изучаю, как задавать вопросы прямо здесь. –

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