Как избежать нескольких циклов для сравнения с каждым элементом массива - PullRequest
0 голосов
/ 01 мая 2020

У меня был один массив, содержащий кредитный лимит клиентов, например [28,32,63], и один массив, содержащий пример значения элементов [48,35]. Теперь только покупатель с кредитным лимитом 63 может купить один из продуктов питания с 48 или 35, и ни первый, ни второй покупатель с кредитным лимитом 28 и 32 не могут купить какие-либо продукты. Я могу сравнить элементы и использовать для l oop, а затем найти количество Например.

int[] custCredit={28,32,63}; 
int[] ItemVal={48,35};
Dictionary<string,bool> objDict=new Dictionary<string,bool>();
for(int n=1;n<=custCredit.Length;n++)
   {
    for(int m=1;m<=ItemVal.Length;m++)
    {
      if(n>=m)
      {
           objDict.Add(n.ToString()+m.ToString(),true);
      };
    }
   }

Теперь я могу найти все значения с истинным в словаре, чтобы узнать максимальное количество клиентов и предметы, которые они могут купить. Теперь можно сделать это только с одним l oop?

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

используйте Linq;

int[] custCredit = { 28, 32, 63 };
int[] ItemVal = { 48, 35 };
var result = custCredit.SelectMany((c, cidx) => ItemVal.Where(i => c >= i).Select((i, iidx) => $"{cidx}{iidx}"));

, если вам нужен словарь с истинным значением:

result.ToDictionary(k => k, v => true)
0 голосов
/ 01 мая 2020

В качестве альтернативы синтаксису в ответе @ user3104267 вы также можете написать как:

int[] custCredit = { 28, 32, 63 };
int[] ItemVal = { 48, 35 };

var results =
    from credit in custCredit
    from item in ItemVal
    where credit >= item
    select credit.ToString() + " can buy " + item.ToString();

foreach (var r in results) Console.WriteLine(r);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...