首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net / C#说明

.Net / C#说明
EN

Stack Overflow用户
提问于 2018-05-31 01:37:51
回答 1查看 126关注 0票数 2

我已经得到了将其转换为Swift的一部分代码,但我不太确定代码是用.net、c#还是java编写的。

这是代码

代码语言:javascript
复制
public static int calculate(string number) {

    string text = number.ToString();

    for (int i = 0; i < text.Length; i++) {
        int num = Convert.ToInt32((int)(text[text.Length - i - 1] - '0'));
    }

}

我尝试这样做,但没有得到预期的结果。

代码语言:javascript
复制
func calculate(_ number: String) -> Int {

     let text = number

     for i in 0..<text.count {

         let num = Int(text.substring(text.count - i - 1).trimmingCharacters(in: CharacterSet(charactersIn: "0"))) ?? 0
     }
}

我不介意告诉我它会是什么样子,我只是想知道这行代码是做什么的,这样我就可以把它转换成swift了。

Int(text.substring(text.count - i - 1).trimmingCharacters(in: CharacterSet(charactersIn: "0"))) ?? 0

另外,他为什么要这样做:string text = number.ToString();

因为函数有一个字符串参数,所以在它旁边加上toString不也是一样的吗?(也许为了让代码更清晰?)

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 01:54:33

我不知道斯威夫特,但我可以解释C#代码...这是非常复杂的,可以大大减少...

让我们从第一行开始:

代码语言:javascript
复制
string text = number.ToString();

这会将数字转换为字符串,因此假设数字为123450,它将其转换为"123450"。在您的示例中不需要它,因为number已经作为string传入,所以可以完全省略.ToString()而不会影响任何东西。

现在是for循环:

代码语言:javascript
复制
for (int i = 0; i < text.Length; i++) {
    int num = Convert.ToInt32((int)(text[text.Length - i - 1] - '0'));
}

它将迭代字符串中的每个字符,循环可以通过更好地使用for-loop参数来简化:

代码语言:javascript
复制
for (int i = text.Length - 1; i >= 0; i--) {
    int num = Convert.ToInt32((int)(text[i] - '0'));
}

会更容易阅读,但我们将继续使用原始代码...

忽略这在上面的上下文中实际上是无效的,让我们假设您在循环中使用num做了一些事情,以使它变得有价值。

让我们来分析一下:

代码语言:javascript
复制
text[text.Length - i - 1] - '0'

正在做一些"ASCII数学运算“来得出一个数字。ASCII数字从十进制48开始,因此'0'等同于值48。因此,对于第一次迭代:

代码语言:javascript
复制
text[text.Length (6) - i (0) - 1 = 5] = '0' - '0' = 0

Convert.ToInt32在这里是多余的,因为'0' - '0'的结果是0的整数值。前面的cast (int)也是多余的,因此这一整行代码可以简化为:

代码语言:javascript
复制
int num = text[text.Length - i - 1] - '0';

所以这就更有意义了。你可以用另一种方式来写它:

代码语言:javascript
复制
int num = Convert.ToInt32(text[text.Length - i - 1]) - 48;

因此,它基本上将字符'0'转换回数字0,依此类推,所有数字从0到9。如果number是浮点值,此代码将中断(给出不准确的结果)。

我知道这里的练习是将其转换为另一种语言,但在C#中,整个for循环可以简化为:

代码语言:javascript
复制
public static int calculate(string number)
{
    var reverseNums = number.ToCharArray().Reverse().Select(c => c - '0').ToList();

    //Do whatever on the reverseNums    
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50610577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档