在Linq处理临时计算(Handling temporary calculation in Linq)

编程入门 行业动态 更新时间:2024-10-27 22:19:53
在Linq处理临时计算(Handling temporary calculation in Linq)

在解决面试问题时

问题 当乘以2到9之间的整数时,需要以这种方式找到一个六位数字,当数字反转时给出原始的六位数字。

例:

假设我乘以219978 * 4我得到879912,当反向879912我将得到219978回来。

我用它解决了

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解决它。 例如,我在处理临时计算时有点困惑

当我使用

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

什么是在linq中处理像var num = l.ToString()等临时计算的方法。在Linq中我很困惑我完成它。感谢帮助。

When solving an interview question

Question A six digit number need to be found in such a manner when it is multiplied by an integer between 2 and 9 gives the original six digit number when its digits are reversed.

Example:

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

I solved it using

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); } } }

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

when i use

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

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是从您的原始版本的代码中获取,但可能需要使用Range(3,8)代替):

109989 x 9 = 989901

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

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 };

这减少了创建的字符串数量,使用整数相等,并正确使用范围( Range的第二个参数是计数 ,而不是结束)。

You want let...

// 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); }

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).

更多推荐

本文发布于:2023-08-07 19:14:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465652.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Handling   Linq   calculation   temporary

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!