【问题标题】:Is there a C# equivalent to pythons ast.literal_eval function是否有与 pythons ast.literal_eval 函数等效的 C#
【发布时间】:2022-01-09 11:28:57
【问题描述】:

我是 C# 的新手,正在寻找一种很好且方便的方法来将编码为字符串的数组转换回 C# 中的数组。例如,将字符串“[1.2,24.4,35.5,4.5]”转换为浮点数组

import ast
ast.literal_eval("[1.2,24.4,35.5,4.5]")
[1.2, 24.4, 35.5, 4.5]

或字符串"["foo",123,[1,2,3]]"

ast.literal_eval("[\"foo\",123,[1,2,3]]")
['foo', 123, [1, 2, 3]]

【问题讨论】:

  • 这算作有效的 json 吗?你可以试试JsonSerializer.Deserialize<float[]>("...")

标签: python c# arrays string decode


【解决方案1】:

您提供的浮点数组可以解释为 JSON。您可以使用 JSON.NET 或您首选的 JSON 序列化程序将其反序列化为 C# 中的数组。

JSON.NET:

float[] myArray = JsonConvert.DeserializeObject<float[]>("[1.2,24.4,35.5,4.5]");

System.Text.Json:

float[] myArray = JsonSerializer.Deserialize<float[]>("[1.2,24.4,35.5,4.5]");

【讨论】:

    【解决方案2】:

    如果你不打算实现一个更通用、更多的表达式解释器 复杂的。 你可以用正则表达式和一些 linq 表达式来做到这一点。这可能是最简单的。 代码如下:

    using System;
    using System.Linq;
    using System.Text.RegularExpressions;
    
    namespace StringToArray
    {
        class Program
        {
            static void Main()
            {
                string testString = "[1.2, 24.4, 35.5, 4.5]";
                // It rough mean that have some digit and maybe have comma and some digit after comma.that repeat many times.
                var array = Regex.Matches(testString, @"(\d+\.?\d*)+") 
                    .Select(group => Convert.ToDouble(group.Value)) // Get digit string and convert to double
                    .ToArray(); // Get float array
                foreach (var value in array)
                {
                    Console.WriteLine(value); // Output: 1.2, 24.4, 35.5, 4.5
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-06
      • 2010-11-09
      • 2018-07-19
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2012-06-05
      • 2011-04-07
      相关资源
      最近更新 更多