处理Linq中的临时计算 [英] Handling temporary calculation in Linq

查看:155
本文介绍了处理Linq中的临时计算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在解决一个面试问题



一个六位数字需要找到在当它被2和9之间的整数相乘的方式给出了原始六位数字时,其数字被逆转。

示例:

假设我乘219978 * 4,我得到879912,反向879912时,我会得到219978回来。

Suppose I multiply 219978 * 4 i get 879912 ,when reverse 879912 I will get 219978 back.


我解决它使用

for (long l = 100000; l < 999999; l++)
{
 var num = l.ToString();

for (int i = 3; i < 9; i++)
{
  var mul = l * i;
  string str = mul.ToString();
  char[] splitDigits = str.ToCharArray();
  string reversedDigit =
  new  string(splitDigits.Reverse().ToArray());

  if (reversedDigit.CompareTo(num) == 0)
    {
      Console.WriteLine("{0} * {1}= {2},
       when multiplied {3} ", num, i, mul,reversedDigit);

    }

 }
}


原来的任务是使用LINQ来解决它。
我在办理临时计算,例如一些混乱

The original task was to solve it using linq. I have bit confusion in handling temp calculations for example

当我在Enumerable.Range使用

when i use

   var = from l in Enumerable.Range(100000,999999)
         from i in Enumerable.Range(3,9)

什么是处理临时计算VAR一样NUM = l.ToString()的方式,在等混淆linq.It我很多来完成它Linq.Help表示赞赏。

What is the way to handle temporary calculations like var num = l.ToString(),etc in linq.It confused me a lot to finish it in Linq.Help is appreciated.

推荐答案

您想 ...

    // NOTE: buggy; see below
    var qry =  from l in Enumerable.Range(100000, 999999)
               from i in Enumerable.Range(3, 9)
               let s = l.ToString()
               let t = (l * i).ToString()
               where s.Reverse().SequenceEqual(t)
               select new { l, i };

    var a = qry.First();
    Console.WriteLine("an answer...");
    Console.WriteLine("{0} x {1} = {2}", a.l, a.i, a.l * a.i);

    Console.WriteLine("all answers...");
    foreach (var row in qry)
    {
        Console.WriteLine("{0} x {1} = {2}", row.l, row.i, row.l * row.i);
    }



与第一个答案(注意9的包含从您的原始代码的版本拍摄,但可能需要使用范围(3,8)代替):

with first answer (note the inclusion of 9 is taken from your original version of the code, but it may be desirable to use Range(3,8) instead):

109989 x 9 = 989901


优化的版本(和正确的范围内):

Optimised version (and correct range):

    var qry =  from l in Enumerable.Range(100000, 999999 - 100000)
               let s = l.ToString()
               let sReversed = new string(s.Reverse().ToArray())
               let wanted = int.Parse(sReversed)
               from i in Enumerable.Range(3, 8 - 3) 
               where l * i == wanted
               select new { l, i };

这减少了创建字符串数,使用整数平等,和正确地使用范围(第二个参数到范围计数,没有终点)。

This reduces the number of strings created, uses integer equality, and correctly uses the range (the second parameter to Range is the count, not the end).

这篇关于处理Linq中的临时计算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆